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

6

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

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?

У меня был довольно большой рот в моем случае. sepehr
Не хватит ли использовать shutup operator @?@curl_setopt_array(...); jasir

Ваш Ответ

2   ответа
5

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

curl_setopt($curl_handle, CURLOPT_SAFE_UPLOAD, false);

УвидетьВот

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

Лучшее решение, которое я нашел, это/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;
}
Это круто! Я должен быть совместим с PHP 5.4 и 7, и это, кажется, единственное, что работает в моем случае. Большое спасибо. Alexander Günther
Этот тоже неплох:php.net/manual/en/function.curl-file-create.php#114538 Fabrizio Regini

Похожие вопросы