检测 URL 是否为图像的最佳方法是什么?
检测 URL 是否为图像的最佳方法是什么?
What is the best way to detect that a URL is that of an image?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
检测 URL 是否为图像的最佳方法是什么?
What is the best way to detect that a URL is that of an image?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
使用 PHP:
最安全 - 获取实际图像数据。执行
getimagesize()
通过实际读取图像内的标头字节来确定图像类型文件。最快 - 获取资源、解析响应标头并查找
content-type
标头。此方法不如第一种方法可靠:服务器可能撒谎或配置错误。甚至更快 - 对 URL 执行 HEAD 请求,并查找
content-type
标头。可能不适用于动态图像资源。我没有这方面的经验,因此效果可能会有所不同。极度偏执最安全但速度慢 - 使用 PHP 获取实际图像数据,使用 GD 库将它们复制到新的图像资源中,然后保存结果。如果此过程成功,则保证是一个有效的、未受污染的图像。资源密集型;浏览器支持但 GD 不支持的一些有效图像格式将被列入表中。
我会选择第一个选择。
使用 JavaScript:
img
元素中。如果onload
事件触发,并且图像随后具有物理尺寸,则浏览器成功加载该图像。Using PHP:
Safest - fetch the actual image data. Do a
getimagesize()
to determine the image type by actually reading the header bytes inside the file.Fastest - fetch the resource, parse the response headers and look for the
content-type
header. This method is not as reliable as the first one: The server could be lying, or misconfigured.Even faster - do a HEAD request on the URL, and look for the
content-type
header. May not work for dynamic image resources. I have no experience with this, so mileage may vary.Ultra-paranoid safest but slooow - fetch the actual image data using PHP, copy them into a new image resource using the GD library, and save the result. If this process works out, it is guaranteed to be a valid, untainted image. Resource-intensive; some valid image formats that a browser supports but GD does not will fall under the table.
I'd go for the first option.
Using JavaScript:
img
element. If theonload
event fires, and the image has physical dimensions afterwards, the browser managed to load the image.可以看看 HTTP 标头吗?只是一个想法。
May be look at the HTTP Headers? Just a thought.
一旦您请求该 URL 的 HTTP 连接,请尝试检查响应的标头...尝试查找 mime 类型。
Try to check the headers of the response once you have request an HTTP connection of that URL... try to look for the mime-type.
如果您只有 URL 而没有服务器在您请求 URL 时给您的响应,那么您唯一能做的就是根据文件扩展名进行猜测,但不能保证以 .jpg 结尾的文件是一个图像或以 .php 结尾的文件不是图像。
您可能会很高兴以 .jpg、.gif、.png 等结尾的网址将是图像,但不能保证。
对于其他任何事情来说,除非你检索它,否则基本上是不可能的。
If you only have the URL rather than the response the server will give you when you request the URL, then the only thing you can do is guess based on the file extension, but there is NO guarantee that a file ending in .jpg is an image or that a file ending in .php is not an image.
You can probably be reasonably happy urls ending in .jpg, .gif, .png etc are going to be images but it is not guaranteed.
For anything else its essentially impossible unless you retrive it.