2

我一直在搜索互联网以及 SO 的许多帖子,但没有运气。我有以下代码从远程服务器获取文件。

$url  = 'http://www.example.com/images/abc.png';
$path = '/home/axxxxxxx/public_html/images/abc.png';

$fp = fopen($path, 'w');

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);

$data = curl_exec($ch);

curl_close($ch);
fclose($fp);

$url$path表示来自一台服务器的文件。‰PNG IHDRàw=ø IDATxÚ•yLWÇ¿3³3³ì² (VP)àUÓzDc«当我运行代码时,html页面会输出一个奇怪的代码,它以...开头。

当我使用文本编辑器打开 new.png 时,我得到的代码与上面 php cURL 脚本所在页面中的代码相同。(这似乎是脚本读取了正确的文件)

我也收到错误消息说,

  • Warning: fopen(../axxxxxxx/public_html/images/new.png) [function.fopen]: failed to open stream: No such file or directory in /home/ayyyyyyy/public_html/test.php on line 5
  • Warning: curl_setopt(): supplied argument is not a valid File-Handle resource in /home/ayyyyyyy/public_html/test.php on line 8

此处显示的 unicode 字符集 ( PNG IHDRàw=ø IDATxÚ•yLWÇ¿3³3³ì² (VP)àUÓzDc«)

  • Warning: fclose(): supplied argument is not a valid stream resource in /home/ayyyyyyy/public_html/test.php on line 12

如果重要的话,这两个站点都托管在 000webhost.com 上。

如何将文件下载到用户的计算机?

4

1 回答 1

0

问题是(如果有的话)是您正在下载的文件是一个PNG文件,而您正试图将其作为文本文件读取 - 这是您看到的“奇怪代码”。

如果您在将文件输出到浏览器之前发送了Content-Type标题,您将看到实际图像:

header('Content-Type: image/png');
echo $data;

通过download the file to the user's computer,我假设您的意思是要提示用户下载文件。为此,请将Content-disposition标头设置为attachment. 您也可以将其与上面的内容类型标头结合使用:

header("Content-Type: image/png");
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"some_image.png\""); 
于 2013-03-18T17:28:33.490 回答