php7.0 出现 curl_setopt(): Disabling safe uploads is no longer supported in 报错!

项目换成php7.0,进行了测试,使用curl时,出现:

curl_setopt(): Disabling safe uploads is no longer supported in xxx。定位到代码行:

		//5.6版本兼容
		if (ver_compare(phpversion(), '5.6') >= 0) {
			curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
		}

所有问题都是因为 CURLOPT_SAFE_UPLOAD 这个选项。

1.查看手册发现,5.50添加该选项,默认值为false。5.6之后,默认值为true,这里另其为false。

2.手册上并未更新文档,7.0以后,不支持禁用该选项,所以导致了我们升级到7.0后,一直报错!


直接不用使用该选项了,网上有个解决方案是,并没有多大意义:


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

上面的解决方法不合理,又找了点资料

php5.6关于curl以@方式上传文件的变化及解决七牛上传时报file is not specified in multipart的问题

上面的文章就提到了这个问题,但是针对的是php5.6

7.0后,curl不支持设置 CURLOPT_SAFE_UPLOAD设置为false,只能是true。但是提供了使用 CURLFile来替代的方案,可查看手册,手册中有人写到:

if(is_array($postfields) == true)
{
    // Check each post field
    foreach($postfields as $key => $value)
    {
        // Convert values for keys starting with '@' prefix
        if(strpos($value, '@') === 0)
        {
            // Get the file name
            $filename = ltrim($value, '@');
            // Convert the value to the new class
            $postfields[$key] = new CURLFile($filename);
        }
    }
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
发现传输的post中有以 '@' 开头的文件,使用new CURLFile() 来转换,然后就可以不用设置 curlopt_safe_upload为false了。这个是5.5以后才支持的。

为了兼容性,可以7.0以前,设置为curlopt_safe_upload=false,7.0后,发现@,进行curlfile来转换,就可以解决这个问题了,我们项目中的截图如下:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PHP Laravel是一个流行的Web开发框架,可以简化PHP开发过程并提供更好的开发体验。curl_setopt函数是PHP中用于设置cURL选项的函数,而cURL是一个用于发送和接收HTTP请求的库。下面是使用PHP Laravel和curl_setopt函数进行POST请求的示例。 1. 在Laravel中,首先要确保cURL扩展已经安装和启用。可以在php.ini文件中将以下行取消注释: extension=curl 2. 在Laravel应用中,可以使用Guzzle HTTP客户端库作为curl_setopt函数的替代方案。Guzzle库提供了更简单而又强大的HTTP请求功能,可以使用Laravel的composer工具进行安装: composer require guzzlehttp/guzzle 3. 使用Guzzle库进行POST请求的示例代码如下: ```php use GuzzleHttp\Client; $url = 'http://example.com/api'; // POST请求的URL $data = ['name' => 'John', 'email' => '[email protected]']; // POST请求的数据 $client = new Client(); $response = $client->post($url, ['form_params' => $data]); $statusCode = $response->getStatusCode(); // 获取响应的HTTP状态码 $responseData = $response->getBody()->getContents(); // 获取响应的内容 // 处理响应数据 ``` 在上面的示例中,使用Guzzle库创建了一个HTTP客户端实例$client。然后使用post方法发送POST请求,传递了请求的URL和POST数据。响应对象$response提供了一些方法来获取响应的状态码和内容。 使用curl_setopt函数进行POST请求的示例代码如下: ```php $url = 'http://example.com/api'; // POST请求的URL $data = ['name' => 'John', 'email' => '[email protected]']; // POST请求的数据 $curl = curl_init($url); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); // 处理响应数据 ``` 在上面的示例中,通过curl_init函数初始化cURL会话,并设置请求的URL。然后使用curl_setopt函数设置POST请求,传递请求的数据和其他选项。使用curl_exec函数执行请求,并使用curl_getinfo函数获取响应的HTTP状态码。最后使用curl_close函数关闭cURL会话。 以上就是使用PHP Laravel和curl_setopt函数进行POST请求的示例代码。根据具体情况,可以选用Guzzle库或curl_setopt函数来发送POST请求,并根据响应进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值