如何检查给定的网址是指网页还是原始文件?现在,我检查整个文件是否包含字符串<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>";
答案 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的攻击(如前所述)。