Я запрашиваю API, в который я загружаю файлы, но файлы не загружаются при публикации с использованием PHP7 .4, однако он отлично работает с PHP7 .3.
Вот фрагмент моего code:
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;
}
Таким образом, функция загрузки принимает многомерный массив значений, включая массив файлов с индексом 'files'. Он просматривает файлы, создавая объекты CURLFile, а затем отправляет их вместе с остальными данными в API.
При использовании PHP7 .4 глобальные переменные $ _REQUEST и $ _FILES на сервере API всегда опорожнить. При PHP7 .3 эти переменные заполняются отправленными данными, как и ожидалось.
Вкл. https://www.php.net/manual/en/migration74.new-features.php он сообщает:
CURLFile теперь поддерживает потоковые упаковщики в дополнение к простым именам файлов, если расширение было построено для libcurl> = 7.56.0.
Версия Libcurl - 7.58.
Здесь представлен соответствующий отчет об ошибке https://bugs.php.net/bug.php?id=79013 относительно отсутствующего заголовка Content-Length, в результате чего файлы не загружаются, но, похоже, команда PHP считает, что проблема с сервером, а не PHP.
Есть ли у кого-нибудь Любая идея, как загрузить файлы, используя PHP7 .4?