0

如何检查给定的 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>";
4

2 回答 2

3

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

请参阅使用 PHP 获取 HTTP 响应标头/重定向状态

不过,这不会是 100% 可靠的——在极少数情况下,服务器可能不会发送content-type标头。

于 2013-01-26T18:42:10.847 回答
0

来自 URL 的数据可以是任何东西,基于磁盘的文件、动态生成的数据流、数据库查询结果等。如果 url 的所有者很有趣,甚至可以将 content-type 标头设置为任何东西或邪恶(例如将内容类型设置为 text/html 并提供几 GB 的随机文本)。

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

于 2013-01-26T18:49:50.823 回答