PHP下载远程图片的几种方法总结
程序员文章站
2024-03-02 13:05:52
...
PHP下载远程图片的几种方法总结
本文演示3个从远程URL下载图片,并保存到本地文件中的方法,包括file_get_contents,curl和fopen。
1、使用file_get_contents
function dlfile($file_url, $save_to)
{
$content = file_get_contents($file_url);
file_put_contents($save_to, $content);
}
2、使用CURL
function dlfile($file_url, $save_to)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch,CURLOPT_URL,$file_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$file_content = curl_exec($ch);
curl_close($ch);
$downloaded_file = fopen($save_to, 'w');
fwrite($downloaded_file, $file_content);
fclose($downloaded_file);
}
3、使用fopen
function dlfile($file_url, $save_to)
{
$in= fopen($file_url, "rb");
$out= fopen($save_to, "wb");
while ($chunk = fread($in,8192))
{
fwrite($out, $chunk, 8192);
}
fclose($in);
fclose($out);
}
下载与保存完整方法(输出日志那行可删除):
private function downloadImage($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
$this->saveAsImage($url, $file);
}
private function saveAsImage($url, $file)
{
$filename = pathinfo($url, PATHINFO_BASENAME);
$dirname = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_DIRNAME);
$path = 'public' . $dirname . '/';
$fullpath = 'public' . $dirname . '/' . $filename;
// 如果目录不存在,则创建
if(!is_dir($path)) {
mkdir($path, 0777, true);
}
if(file_exists($fullpath)) {
//$this->output->writeln("【已存在】输出路径" . $fullpath);
} else {
$resource = fopen($fullpath, 'a');
fwrite($resource, $file);
fclose($resource);
//$this->output->writeln("【已保存】输出路径" . $fullpath);
}
}