PHP CURL: использование API @filename для загрузки файлов не рекомендуется

Я получил это сообщение:

Deprecated: curl_setopt_array(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead

я знаю что я могу переписать свой код, используяCURLFile класс, но этоДоступно только с 5.5.

Мой сайтдолжен работать на PHP 5.3, PHP 5.4 или PHP 5.5, поэтому я могут падение 5.3 и 5.4 совместимость. Так что я могу't использовать CURLFile.

Как я могу переписать код, чтобы он работал на любом PHP без каких-либо проверок версии PHP?

 sepehr17 янв. 2015 г., 18:32
У меня был довольно большой рот в моем случае.
 jasir07 янв. 2014 г., 15:07
Не хватит ли использовать shutup operator @?@curl_setopt_array(...);

Ответы на вопрос(2)

что это позволит вам использовать старый способ без предупреждения (если просто подавить с помощью@ не приемлемо):

curl_setopt($curl_handle, CURLOPT_SAFE_UPLOAD, false);

УвидетьВот

 Drew Noel07 янв. 2014 г., 19:53
При использовании нескольких версий вы либо принимаете изменения и игнорируете устаревшее предупреждение, либо что-то вроде:3v4l.org/RfnY7
 Drew Noel07 янв. 2014 г., 20:00
Примечание Eval не делаету меня не будет PHP CURL, если я правильно помню.
 Drew Noel07 янв. 2014 г., 17:09
Я боюсь, что вам, возможно, придется обнаружить обнаружение версии в вашем коде:if(PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 5) { /* CURLFile */ } else { /* Old way */ }
 DmitryR07 янв. 2014 г., 16:17
Там нет такой опции:Примечание: использование неопределенной константы CURLOPT_SAFE_UPLOAD " 3v4l.org/caAj8I»
 DmitryR07 янв. 2014 г., 18:30
Верхние уровни абстракции не должныне полагайтесь на нижнюю :(
Решение Вопроса

Лучшее решение, которое я нашел, это/src/Guzzle/Http/Message/PostFile.php:

public function getCurlValue()
{
    // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax
    // See: https://wiki.php.net/rfc/curl-file-upload
    if (function_exists('curl_file_create')) {
        return curl_file_create($this->filename, $this->contentType, $this->postname);
    }

    // Use the old style if using an older version of PHP
    $value = "@{$this->filename};filename=" . $this->postname;
    if ($this->contentType) {
        $value .= ';type=' . $this->contentType;
    }

    return $value;
}
 Alexander Günther05 окт. 2015 г., 18:23
Это круто! Я должен быть совместим с PHP 5.4 и 7, и это, кажется, единственное, что работает в моем случае. Большое спасибо.
 Fabrizio Regini18 нояб. 2015 г., 17:08

Ваш ответ на вопрос