0

特定の URL が Web ページまたは raw ファイルを参照しているかどうかを確認するにはどうすればよいですか? 今のところ、ファイル全体に文字列<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 の所有者が遊び心がある場合は、コンテンツ タイプ ヘッダーでさえ、何でも設定できます。または悪 (たとえば、コンテンツ タイプを text/html に設定し、数ギガバイトのランダム テキストを提供する)。

それに加えて、あなたのコードは最適な解決策とはほど遠いものです.1ギガバイトのデータを持つファイルを提供するURLについて考えてみてください:あなたのサーバーは苦しむでしょう. PHP の CURL 拡張機能を使用するためのより良いソリューション: HEAD クエリを URL に送信してプロパティを検出し、コンテンツをディスク ファイルにダウンロードして後で調べます (MIME タイプ検出器またはその他のソリューションを使用)。警告: CURL を使用しても、(前述のように) 悪意のある URL から保護されません。

于 2013-01-26T18:49:50.823 に答える