3

YouTube 動画が有効か無効かを通知する php コードをまとめました。YT ドメインからの URL のみが必要なので、他の URL ケースをキャッチしてエラーを返すように配列を設定しました。問題は、次のような形式で URL を入力するとwww.youtube.com/v/NLqAF9hrVbY、最後のエコー エラーが表示されますがhttp、その URL の前に を追加すると機能することです。でチェックし$urlてい PHP_URL_HOSTます。

のない許可されたドメインの URL を受け入れないのはなぜhttpですか?

PHP

if ($_POST) {
    $url = $_POST['name'];

    if (!empty($url['name'])) {
        $allowed_domains = array(
            'www.youtube.com',
            'gdata.youtube.com',
            'youtu.be',
            'youtube.com',
            'm.youtube.com'
        );

        if (in_array(parse_url($url, PHP_URL_HOST), $allowed_domains)) {

            $formatted_url = getYoutubeVideoID($url);
            $parsed_url = parse_url($formatted_url);
            parse_str($parsed_url['query'], $parsed_query_string);
            $videoID = $parsed_query_string['v'];

            $headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $videoID);

            if ($videoID != null) {

                if (strpos($headers[0], '200')) {
                    echo('<div id="special"><span id="resultval">That is a valid youtube video</span></div>');

                }
                else {

                    echo('<div id="special"><span id="resultval">The YouTube video does not exist.</span></div>');
                    return false;
                }

            }
            {

                echo('<div id="special"><span id="resultval">The YouTube video does not exist.</span></div>');
                return false;
            }
        }
        else {

            echo ('<div id="special"><span id="resultval">Please include a video URL from Youtube.</span></div>');

        }
        ?>
4

1 に答える 1

3

parse_url()には、プロトコル識別子 (スキーム - 例: http) が存在する有効な URL を指定する必要があります。これが、比較が失敗する理由です。

これは次のように修正できます。

if(substr($url, 0, 4) != 'http')
$url = "http://".$url;

実行する前に上記を使用してください

if(in_array(parse_url($url, PHP_URL_HOST), $allowed_domains)){ ... }
于 2012-07-21T06:17:32.617 に答える