Загрузка файлов с использованием CURLFile завершается с ошибкой PHP7 .4 - PullRequest
0 голосов
/ 01 марта 2020

Я запрашиваю 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?

...