我有数千个图像网址存储在一个表格中,每行一个。问题是他们中的一些具有空格,重音字符等格式错误的名称,例如:
https://www.greatsite.com/upload/memdocs/111046-carte d'identit� 001-072716141540.jpg
在浏览器中打开此URL时,会输出以下错误:
Not Found
The requested URL /upload/memdocs/111046-carte d'identit� 001-072716141540.jpg was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
我需要以编程方式查找抛出此“未找到”错误的所有图片网址(以便稍后正确格式化图片网址名称)。
到目前为止,我正在尝试使用getimagesize()和file_get_contents(),但没有运气。 getimagesize()并不总是有效,因为我觉得它有点修复图像名称,因为例如对于上面的url,它实际上会返回带有图像信息的数组。并且file_get_contents()总是返回一些东西,无论图像url是否抛出“Not Found”错误。
有关如何实现这一目标的任何建议?我希望我有道理。感谢
答案 0 :(得分:1)
您可以从DB获取所有图像并使用foreach迭代它们。在foreach中尝试检查文件是否存在。例如:
foreach ($images as $image) {
$valid = is_file($imageDir.$image->path);
}
is_file是检查文件是否存在的最佳方式。 file_get_contents将读取整个缓慢的文件。
或者您可以在图像路径上执行正则表达式:
foreach ($images as $image) {
$valid = preg_match('/[0-9a-zA-Z\$-_\.\+!\*'\(\),];\/\?\:\@=\&/', $image->path);
}
我不是100%确定这个正则表达式是否会正确验证所有网址....但大多数都是。
答案 1 :(得分:0)
您应该获得执行网络请求的标头:
foreach ($images as $image) {
$url = 'https://www.greatsite.com/'.$image;
$file_headers = @get_headers($url);
if($file_headers && $file_headers[0] == 'HTTP/1.1 404 Not Found') {
// URL Not Found do something to log it
}
}
还有许多其他方法,使用CURL等,但我发现这是最简单的