PHP的fopen响应失败(PHP fopen fails in response)

2019-09-22 09:13发布

我有在执行从PHP谷歌搜索URL的获取问题。 下面是我的代码:

<?php
    $handle = fopen("http://www.google.com/complete/search?hl=en&js=true&qu=" .
        $_GET["qu"], "r");
    while (!feof($handle)) {
        $text = fgets($handle);
        echo $text;
    }
    fclose($handle);
?>

这是我得到的错误:

PHP的警告:FOPEN( http://www.google.com/complete/search?hl=en&js=true&qu=cat ):未能打开流:A连接尝试失败,因为连接的方没有正确一段时间后应对,或已建立的连接失败,因为连接的主机没有反应。 在C:在线路3 PHP致命错误\的Inetpub \测试\ google.php:用C超过60秒的最大执行时间:在第3行\的Inetpub \测试\ google.php

我使用的小提琴手,和做本身工作正常的URL的请求,但由于某些原因,PHP不会。 任何人有任何想法,为什么?

更新:这里是我的javascript:

function getSuggest(keyEvent) {
  keyEvent = (keyEvent) ? keyEvent : window.event;
  input = (keyEvent.target) ? keyEvent.target : keyEvent.srcElement;

  if (keyEvent.type == "keyup") {
    if (input.value) {
      getSearchData("google.php?qu=" + input.value);
    } else {
 var target = document.getElementById("targetDiv");
 target.innerHTML = "<div></div>";
    }
  }
}

function getSearchData(dataSource) {
  if (XMLHttpRequestObject) {
    XMLHttpRequestObject.open("GET", dataSource);
 XMLHttpRequestObject.onreadystatechange = function() {
   if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
     eval(XMLHttpRequestObject.responseText);
        }
 }
    XMLHttpRequestObject.send(null);
  }
}

function sendRPCDone(unusedVariable, searchTerm, arrayTerm, arrayResults, ususedArray) {
  var data = "<table>";
  var loopIndex;

  if (arrayResults.length != 0) {
    for (var loopIndex = 0; loopIndex < arrayResults.length; loopIndex++) {
 data += "<tr><td>" + "<a href='http://www.google.com/search?q=" +
   arrayTerm[loopIndex] + "'>" + arrayTerm[loopIndex] + '</a></td><td>' +
   arrayResults[loopIndex] + "</td></tr>";
    }
  }

  data += "</table>";
  var targetDiv = document.getElementById("targetDiv");
  targetDiv.innerHTML = data;
}

这里是我的html:

<div id="googleSearch">
  Search For <input id="textField" type="text" name="textField" onkeyup="getSuggest(event)" />
  <div id="targetDiv4"></div>
</div>

Answer 1:

编辑:

如果事实证明你有用户代理字符串的问题,您可以设置用户代理PHP使用由创建并运行它用下面的代码文件: <?php ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1) Gecko/20090615 Firefox/3.5'); ?> <?php ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1) Gecko/20090615 Firefox/3.5'); ?>

我认为你必须设置这个后重新启动IIS,但不是100%对。

注:这是一个随机的用户代理字符串我拉,有很多在那里,你可以设置你希望它几乎任何东西。 还有更多的在: http://www.useragentstring.com/


要检查了allow_url_fopen是,这样做:

  1. 在服务器上创建一个PHP文件,命名为任何你想要的。
  2. 将这个文件中加入<?php phpinfo(); ?> <?php phpinfo(); ?>
  3. 通过Web浏览器或提琴手执行服务器上的脚本,如果你使用的是
  4. 检查所有必要的设置。

让我们知道它是什么,那么我们就可以引导您将其设置为你所需要的。



Answer 2:

这看起来像一个暂停。 这可能是因为服务器你正在尝试使用基于辨别请求进行沟通USER_AGENT 。



Answer 3:

你已经验证了php.ini中allow_url_fopen选项为ON? 加上default_socket_timeout?

; 是否允许URL的处理(如http://或ftp://)的文件。 于allow_url_fopen =开

; 是否允许包括/需要打开的URL(如http://或ftp://)的文件。 allow_url_include =关闭

; 基于socket的流(秒)默认超时default_socket_timeout = 60

我同意它看起来像一个暂停。

你跟PHP 5的工作,如果是的话,你可以尝试的file_get_contents()。



文章来源: PHP fopen fails in response
标签: php url get