为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP7.4 中使用 CURLFile 上传文件失败

在 PHP7.4 中使用 CURLFile 上传文件失败

PHP
白板的微信 2022-10-14 10:37:19
我查询了一个我上传文件的 API,但是当我使用 PHP7.4 发布时没有上传文件,但是,它适用于 PHP7.3。这是我的代码片段:   public function upload($opts = array())   {        $files = array();        foreach($opts['files'] as $i => $file)        {                $files['files[' . $i . ']'] = new CURLFile($file);        }        unset($opts['files']);        $data = array_merge($files, array( "data" => json_encode($opts)));        $response = self::curlRequest( "https://api.example.com/", $data);        return $response;    }    public static function curlRequest($url, $data)    {                $curl = curl_init();                curl_setopt($curl, CURLOPT_URL, $url);                curl_setopt($curl, CURLOPT_POST, 1);                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);                curl_setopt($curl, CURLOPT_FAILONERROR, 1);                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);                curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');                curl_setopt($curl, CURLOPT_TIMEOUT, 300);                curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 300);                $response = curl_exec($curl);                curl_close($curl);        return $response;   }因此,上传函数接受一个多维值数组,包括索引为“文件”的文件数组。它遍历文件,创建 CURLFile 对象,然后将它们与其余数据一起发布到 API。使用 PHP7.4,API 服务器上的全局变量 $_REQUEST 和 $_FILES 始终为空。在 PHP7.3 中,这些变量按预期填充了发送的数据。在https://www.php.net/manual/en/migration74.new-features.php上它指出:如果扩展是针对 libcurl >= 7.56.0 构建的,CURLFile 现在除了支持普通文件名之外还支持流包装器。Libcurl 版本是 7.58。已在此处提交了相关的错误报告https://bugs.php.net/bug.php?id=79013关于缺少 Content-Length 标头导致没有文件上传但似乎 PHP 团队认为问题出在服务器上,而不是 PHP。有谁知道如何使用 PHP7.4 上传文件?
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

PHP 7.4.4 版本修复了这个问题。看来这确实是一个错误。



查看完整回答
反对 回复 2022-10-14
  • 1 回答
  • 0 关注
  • 320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信