如何检查URL是否引用网页或文件?

时间:2013-01-26 18:40:32

标签: php file url

如何检查给定的网址是指网页还是原始文件?现在,我检查整个文件是否包含字符串<html>,但这既不有效也不可靠。

$content = file_get_contents($url);
if($content)
{
    // is directory
    if(strrpos($content, "<html>"))
    {
        echo $url . " is a folder." . "<br>";
    }
    else // use raw file...
}
else echo $url . " was not found." . "<br>";

2 个答案:

答案 0 :(得分:3)

您可以获取标头并检查content-type标头。如果它包含text/html,则它是一个HTML文件。

请参阅Fetch HTTP response header/redirect status with PHP

虽然这不是100%可靠 - 在极少数情况下,服务器可能不会发送content-type标题。

答案 1 :(得分:0)

来自URL的数据可以是任何内容,基于磁盘的文件,即时生成的数据流,数据库查询结果等。即使内容类型标头可以设置为任何东西,如果所有者url是好玩的或邪恶的(例如将内容类型设置为text / html并提供几千兆字节的随机文本)。

除此之外,您的代码远非最佳解决方案,请考虑提供大小为1千兆字节数据的文件的URL:您的服务器将受到影响。 使用PHP的CURL扩展的更好解决方案:向URL发送HEAD查询以发现属性,然后将内容下载到磁盘文件并稍后检查(使用mime类型检测器或任何其他解决方案)。警告:即使使用CURL也不能保护您免受恶意URL的攻击(如前所述)。