Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:数组比较问题-URL_Php - Fatal编程技术网

PHP:数组比较问题-URL

PHP:数组比较问题-URL,php,Php,我已经编写了php代码,它将通知YT视频是否有效。因为我只想要来自YT域的URL,所以我设置了一个数组来捕获任何其他URL案例并返回一个错误。问题是,当我以如下格式键入URL时:www.youtube.com/v/NLqAF9hrVbY会出现最后一个回显错误,但当我在该URL前面添加http时,它会找到。我正在用PHP\u url\u HOST检查$url 为什么它不接受没有http的允许域的URL PHP if ($_POST) { $url = $_POST['name'];

我已经编写了php代码,它将通知YT视频是否有效。因为我只想要来自YT域的URL,所以我设置了一个数组来捕获任何其他URL案例并返回一个错误。问题是,当我以如下格式键入URL时:
www.youtube.com/v/NLqAF9hrVbY
会出现最后一个回显错误,但当我在该URL前面添加
http
时,它会找到。我正在用
PHP\u url\u HOST
检查
$url

为什么它不接受没有
http
的允许域的URL

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>');

        }
        ?>
if($\u POST){
$url=$_POST['name'];
如果(!empty($url['name'])){
$allowed_domains=数组(
“www.youtube.com”,
“gdata.youtube.com”,
“youtu.be”,
"youtube.com",,
“m.youtube.com”
);
if(在数组中(解析url($url,PHP\U url\U主机),$allowed\U域)){
$formatted_url=getYoutubeVideoID($url);
$parsed_url=parse_url($formatted_url);
parse_str($parsed_url['query'],$parsed_query_string);
$videoID=$parsed_query_字符串['v'];
$headers=get_headers('http://gdata.youtube.com/feeds/api/videos/“.$videoID);
如果($videoID!=null){
if(strpos($headers[0],'200')){
echo(“这是一个有效的youtube视频”);
}
否则{
echo(“YouTube视频不存在”);
返回false;
}
}
{
echo(“YouTube视频不存在”);
返回false;
}
}
否则{
echo('请包括来自Youtube的视频URL');
}
?>
需要提供协议标识符(方案-例如http)存在的有效URL。这就是比较失败的原因

您可以按如下方式修复此问题

if(substr($url, 0, 4) != 'http')
$url = "http://".$url;
在执行之前,请使用上述命令

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

如果你没有协议,你可以用
pathinfo()
来代替。@Spudley,如果根本没有指定协议,怎么能用
pathinfo()
来代替呢?@DarkXphenomenon-如果没有指定协议,那么它实际上是相同格式的目录路径,所以
pathinfo()
可以用在它上面。但是你是对的;即使这样,你也需要提取根目录,这将是域,所以再考虑一下,它就没有那么有用了。我想也可以使用
explode()