对不起,伙计们,如果它是重复的,我找不到类似的主题。因此,假设有一个包含图像内容的URL,称为"www.test.com/test.jpg"。我想使用 php 将图像保存到文件夹中,所以我使用
file_put_contents('test.jpg', 'www.test.com/test.jpg');
它工作正常,将图像保存到当前文件夹。但是,如果图像 URL 如下所示:
www.test.com/test.jpg?id={1a2b3c-4d5e6f}
我无法使用file_put_contents来保存图像。如果我尝试删除 ?id={1a2b3c-4d5e6f} 部分,浏览器将无法打开图像。任何想法如何使保存成功?
不要使用 URI 作为文件名。这方面的潜在问题超出了您已经发现的问题。
相反,如下所示的内容将起作用。
$uri = 'http://www.test.com/test.jpg?id={1a2b3c-4d5e6f}';
$data = file_get_contents($uri);
file_put_contents(md5($uri),$data);
如果需要图像的原始 URI,请将其存储在数据库或文本文件中,并引用回 MD5。这样的东西可能会起作用(无需测试)。
$uri = 'http://www.test.com/test.jpg?id={1a2b3c-4d5e6f}';
$uriMd5 = md5($uri);
$data = file_get_contents($uri);
file_put_contents($uriMd5,$data);
file_put_contents($uriMd5.'.txt',$uri);
$variable="www.test.com/test.jpg?id={1a2b3c-4d5e6f}";
$variable=substr($variable, 0, strpos($variable, "?")); // www.test.com/test.jpg
file_put_contents('test.jpg', $variable);
试试这个。
解决方案:首先,获取数据的函数:
function getData($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
$data = curl_exec( $ch );
curl_close($ch);
if ($data) return $data;
else die("no data - ".$url);
}
然后使用:
file_put_contents('test.jpg', getData(..URL..));