为什么php保存的远程图片,无法打开?

新手上路,请多包涵
  $url='https://img.alicdn.com/i3/85764793/O1CN0128vX5s1lHFA4aj2YM_!!85764793.jpg';

        file_put_contents('aaa.jpg',$url);

php的代码如图,为什么线上的url可以打开,但是保存到本地之后,就无法打开了?

阅读 2.6k
4 个回答

你倒是去获取数据呀,你这样就只是把 URL 写到了 aaa.jpg 里面,简单的就用 file_get_contents 去获取。

<?php
$url = 'https://img.alicdn.com/i3/85764793/O1CN0128vX5s1lHFA4aj2YM_!!85764793.jpg';

file_put_contents('aaa.jpg', file_get_contents($url));
$url = 'https://img.alicdn.com/i3/85764793/O1CN0128vX5s1lHFA4aj2YM_!!85764793.jpg';
$filename = 'aaa.jpg';
$result = file_put_contents($filename, file_get_contents($url));

if ($result === false) {
    $error = error_get_last();
    throw new Exception('Failed to write file: ' . $error['message']);
} else {
    echo 'File saved: ' . $filename;
}

image.png

因为你保存文件内容不是图片的资源,而是一个字符串。

$url='https://img.alicdn.com/i3/85764793/O1CN0128vX5s1lHFA4aj2YM_!!85764793.jpg';
file_put_contents('aaa.jpg',$url);

这个代码中,保存在aaa.jpg文件中的并不是图片,而是一个 URL 字符串;当然就无法作为图片打开了。

正确的方法:

  1. 获取资源内容,
  2. 保存为文件。

简单实例:

$url = 'https://img.alicdn.com/i3/85764793/O1CN0128vX5s1lHFA4aj2YM_!!85764793.jpg';
$filename = 'aaa.jpg';
file_put_contents($filename, file_get_contents($url));

// file_get_contents($url) 获取的是图片内容

可能原因是你将 url 直接当成文件名保存,实际上它是一个完整的 URL 路径字符串,并不是文件名。

你需要用 curl 或 file_get_contents 获取远程图片的二进制数据并保存到本地文件中。下面是使用 file_get_contents() 函数获取图片并保存为本地文件:

$url = 'https://img.alicdn.com/i3/85764793/O1CN0128vX5s1lHFA4aj2YM_!!85764793.jpg';
$img = file_get_contents($url);
file_put_contents('aaa.jpg', $img);

如果使用 curl 进行操作,示例如下:

$url = 'https://img.alicdn.com/i3/85764793/O1CN0128vX5s1lHFA4aj2YM_!!85764793.jpg';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
$error = curl_error($ch);
$httpCode = curl_getinfo($ch ,CURLINFO_HTTP_CODE); 
curl_close($ch);

if ($httpCode == 200) {
    file_put_contents('aaa.jpg', $data);
}
else{
    echo "cURL Error #:" . $error;
}

其中,CURLOPT_RETURNTRANSFER 参数表示将请求结果以字符串返回,而不是直接输出到屏幕。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题