Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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 当尝试读取网页时,file_get_contents偶尔返回空字符串_Php_Curl - Fatal编程技术网

Php 当尝试读取网页时,file_get_contents偶尔返回空字符串

Php 当尝试读取网页时,file_get_contents偶尔返回空字符串,php,curl,Php,Curl,我试图加载一个包含文件\u get\u contents()的网页,但遇到问题 基本上,我的web应用程序将使用youtube数据api根据用户的查询搜索视频,然后读取每个视频的youtube页面以查找api未提供的信息。我使用file_get_contents()读取youtube页面,然后将文本加载到DOM解析器中。大多数情况下,这就像一种魅力。但是,有时,我会收到警告,说file_get_contents()返回了一个空字符串(不是所有视频,只是其中一些视频)。我知道我提供的url是正确的

我试图加载一个包含文件\u get\u contents()的网页,但遇到问题

基本上,我的web应用程序将使用youtube数据api根据用户的查询搜索视频,然后读取每个视频的youtube页面以查找api未提供的信息。我使用file_get_contents()读取youtube页面,然后将文本加载到DOM解析器中。大多数情况下,这就像一种魅力。但是,有时,我会收到警告,说file_get_contents()返回了一个空字符串(不是所有视频,只是其中一些视频)。我知道我提供的url是正确的,因为我回显了指向该url的链接,并且它按预期工作。我将刷新页面,重新打开浏览器,切换到其他浏览器,等等,但一切都不起作用。然后,我会把它放一两个小时,然后再回来,它会神奇地再次工作

以下是我的代码片段:

function processNext($int) {
    // this function processes the next $int videos from the youtube data api response ($xmlDoc)
    global $xmlDoc;
    $begin = count($_SESSION["results"]) - $_SESSION["start"] + 1;
        /* $_SESSION["results"] is the array of already-processed videos
           $_SESSION["start"] and $_SESSION["end"] are the indexes of the first and last videos in the $xmlDoc
        */
    $end = count($_SESSION["results"]) - $_SESSION["start"] + $int;

    for ($i = $begin; $i <= $end; $i++) {
        $video = $xmlDoc->entry[$i];
        $doc = new DOMDocument();
        $doc->strictErrorChecking = FALSE;
        libxml_use_internal_errors(true);

        // this is the line that is causing me problems
        $doc->loadHTML(file_get_contents(getWatchURL(getVidID($video->id)))); 

        $doc = $doc->documentElement;

               // then, do some processing on the $doc

    }
}
函数processNext($int){
//此函数用于处理来自youtube数据api响应($xmlDoc)的下一个$int视频
全球$xmlDoc;
$begin=计数($\会话[“结果”])-$\会话[“开始”]+1;
/*$\u SESSION[“results”]是已处理视频的数组
$\u SESSION[“start”]和$\u SESSION[“end”]是$xmlDoc中第一个和最后一个视频的索引
*/
$end=计数($_会话[“结果”])-$_会话[“开始”]+$int;
对于($i=$begin;$i条目[$i];
$doc=新的DOMDocument();
$doc->strigerrorchecking=FALSE;
libxml\u使用\u内部错误(true);
//这条线给我带来了麻烦
$doc->loadHTML(文件获取内容(getWatchURL(getVidID($video->id)));
$doc=$doc->documentElement;
//然后,对$doc进行一些处理
}
}
有没有可能是file_get_contents()超时了?cURL对于我正在做的事情来说是不是一个更好的工具


更新:我得到了与cURL相同的结果。

查看。您可以检查请求的状态代码。如果不是
200
,则可能出了问题。

查看。您可以检查请求的状态代码。如果不是
200
,则可能出了问题

如果它是一个受欢迎的页面,并且有很多人在查看它,则文件\u get\u内容可能超时。检查您的php.ini并查看默认的\u socket\u超时设置为什么。如果它是一个受欢迎的页面,并且有很多人在查看它,则文件\u get\u内容可能超时。检查您的php.ini并查看默认的\u socket\u超时设置为什么t to.好的,我一定会尝试这个。我做了这个,我发现我遇到了一些404错误。但这不是我问题的主要来源。主要问题似乎是,有时,出于某种原因,file_get_contents()停止发出新的http请求。例如,当我调用file_get_contents()时10次,前5个请求都可以工作,但在那之后,http_response_头将保持完全相同(包括一些我知道应该更改的cookie数据)对于接下来的5个请求,返回的值将是一个空字符串。知道会发生什么吗?这不是问题的根源,但至少现在我可以检查错误并重复失败的请求。此外,我认为我现在不可能得到更多的答案…:)我也有同样的问题,所以如果有人能解决这个问题,那就太好了。在我的例子中,我只是做了一些非常简单的事情:但是得到了与上面相同的结果。我的代码:$somevar=file\u get\u contents(“index.html”);echo“length=.strlen($somevar);我有一个类似的问题,大约.5%的对file_get_contents()的调用,response和$http_response_header都是空的。我暂时修复了这个问题,如果必要的话,我会重复呼叫多达3次,但这并不是一个真正的修复方法。这是在Gentoo系统上发生的,我的Windows开发系统从来没有显示过这个错误。好的,我一定会尝试这个。我做了这个,我发现我遇到了一些404错误。但这并不是我问题的主要根源。主要问题似乎是,有时出于某种原因,file_get_contents()停止发出新的http请求。例如,当我调用file_get_contents()10次时,前5个请求将起作用,但在那之后,http_response_头将在接下来的5个请求中保持完全相同(包括一些我知道应该更改的cookie数据),并且返回的值将是空字符串。知道会发生什么吗?这不是问题的根源,但至少现在我可以检查错误并重复失败的请求。此外,我认为我现在不可能得到更多的答案……:)我也有同样的问题,所以如果有人能解决这个问题,那就太好了。在我的例子中,我只是做了一些非常简单的事情:但是得到了与上面相同的结果。我的代码:$somevar=file\u get\u contents(“index.html”);echo“length=.strlen($somevar);我有一个类似的问题,大约.5%的对file_get_contents()的调用,response和$http_response_header都是空的。我暂时修复了这个问题,如果必要的话,我会重复呼叫多达3次,但这并不是一个真正的修复方法。这发生在Gentoo系统上,我的Windows开发系统从未显示过此错误。