Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+CURL如何获取文件名_Php_Facebook_Curl_Download - Fatal编程技术网

PHP+CURL如何获取文件名

PHP+CURL如何获取文件名,php,facebook,curl,download,Php,Facebook,Curl,Download,我正试图使用这个函数在PHP中从facebook下载用户个人资料图片 public static function downloadFile($url, $options = array()) { if (!is_array($options)) $options = array(); $options = array_merge(array( 'connectionTimeout' => 5

我正试图使用这个函数在PHP中从facebook下载用户个人资料图片

public static function downloadFile($url, $options = array())
{
    if (!is_array($options))
        $options = array();
    $options = array_merge(array(
                                 'connectionTimeout' => 5, // seconds
                                 'timeout' => 10, // seconds
                                 'sslVerifyPeer' => false,
                                 'followLocation' => true, // if true, limit recursive redirection by
                                 'maxRedirs' => 2, // setting value for "maxRedirs"
                                ), $options);

    // create a temporary file (we are assuming that we can write to the system's temporary directory)
    $tempFileName = tempnam(sys_get_temp_dir(), '');
    $fh = fopen($tempFileName, 'w');

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_FILE, $fh);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $options['connectionTimeout']);
    curl_setopt($curl, CURLOPT_TIMEOUT, $options['timeout']);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $options['sslVerifyPeer']);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, $options['followLocation']);
    curl_setopt($curl, CURLOPT_MAXREDIRS, $options['maxRedirs']);
    curl_exec($curl);

    curl_close($curl);
    fclose($fh);

    return $tempFileName;
}
问题是它将文件以随机名称保存在/tmp目录中,并且没有扩展名。如何获取文件的原始名称我对原始扩展名更感兴趣

重要的是:

该url实际上重定向到图像,所以我无法从原始url获取它 最终url的标题中没有文件名
如果URL重定向到图像,您仍然可以从标题中获取文件名。使用带有Chrome等开发工具的浏览器,您可以查看从原始请求到结果文件的前后标题,文件名必须在其中的某个位置。话虽如此,我的印象是Facebook出于隐私原因将所有图片重写为自己的文件名

您可以根据响应的内容类型重新创建扩展

运行curl_exec后,请尝试:

$content_type = curl_getinfo($curl,CURLINFO_CONTENT_TYPE);
例如,对于JPEG,这将返回类似于image/jpg的内容。然后可以重命名临时文件,使其具有正确的扩展名


如果您可以使用PHP5.3,一种可能更简洁的方法就是在下载文件后调用该文件的finfo_文件,该文件应读取MIME类型,从而允许您选择适当的扩展名,而不依赖头数据。finfo_文件在fileinfo PECL扩展名中也可用。

如果URL重定向到图像,您仍然可以从标题中获取文件名。使用带有Chrome等开发工具的浏览器,您可以查看从原始请求到结果文件的前后标题,文件名必须在其中的某个位置。话虽如此,我的印象是Facebook出于隐私原因将所有图片重写为自己的文件名

您可以根据响应的内容类型重新创建扩展

运行curl_exec后,请尝试:

$content_type = curl_getinfo($curl,CURLINFO_CONTENT_TYPE);
例如,对于JPEG,这将返回类似于image/jpg的内容。然后可以重命名临时文件,使其具有正确的扩展名


如果您可以使用PHP5.3,一种可能更简洁的方法就是在下载文件后调用该文件的finfo_文件,该文件应读取MIME类型,从而允许您选择适当的扩展名,而不依赖头数据。finfo_文件在fileinfo PECL扩展名中也可用。

如果您只是查找图像类型jpg/png/gif,并且安装了可以使用的GD扩展名,它将返回图像类型以及其他详细信息。这比查看文件扩展名更准确


使用getimagesize后可能也会有所帮助。

如果您只是查找图像类型jpg/png/gif,并且安装了可以使用的GD扩展,它将返回图像类型以及其他详细信息。这比查看文件扩展名更准确

使用getimagesize后可能也会有所帮助