PHP CURL:不推荐使用@filename API进行文件上载

时间:2014-01-07 13:11:05

标签: php

我收到了这条消息:

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的兼容性。所以我不能使用CURLFile。

如何在没有任何PHP版本检查的情况下重写代码以使其在任何PHP上运行?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:5)

我相信这将允许您使用旧的方式而不会发出警告(如果只是通过@抑制是不可接受的):

curl_setopt($curl_handle, CURLOPT_SAFE_UPLOAD, false);

请参阅here