PHP fopen响应失败
我在从php获取Google搜索url时遇到问题。以下是我的代码:PHP fopen响应失败,php,url,get,Php,Url,Get,我在从php获取Google搜索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; } f
<?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():
无法打开流:一个连接
尝试失败,因为已连接
在一次会议之后,该党没有作出适当的回应
一段时间,或确定的时间
连接失败,因为已连接
主机无法响应。在里面
第3行的C:\Inetpub\test\google.php
PHP致命错误:最大执行量
在中超过60秒的时间
第3行的C:\Inetpub\test\google.php
我使用的是fiddler,对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;
}
函数getSuggest(keyEvent){
keyEvent=(keyEvent)?keyEvent:window.event;
输入=(keyEvent.target)?keyEvent.target:keyEvent.srcElement;
if(keyEvent.type==“keyup”){
if(输入值){
getSearchData(“google.php?qu=“+input.value”);
}否则{
var target=document.getElementById(“targetDiv”);
target.innerHTML=“”;
}
}
}
函数getSearchData(数据源){
if(XMLHttpRequestObject){
open(“GET”,数据源);
XMLHttpRequestObject.onreadystatechange=函数(){
if(XMLHttpRequestObject.readyState==4&&XMLHttpRequestObject.status==200){
eval(XMLHttpRequestObject.responseText);
}
}
XMLHttpRequestObject.send(null);
}
}
函数sendRPCDone(未使用变量、搜索项、arrayTerm、arrayResults、UsuseSeadarray){
var数据=”;
var指数;
如果(arrayResults.length!=0){
对于(var loopIndex=0;loopIndex
这是我的html:
<div id="googleSearch">
Search For <input id="textField" type="text" name="textField" onkeyup="getSuggest(event)" />
<div id="targetDiv4"></div>
</div>
寻找
这看起来像是超时。可能是您尝试与之通信的服务器根据请求进行区分。您是否已验证php.ini allow\u url\u fopen是否打开?以及默认的\u socket\u超时
;是否允许治疗
URL(如http://或ftp://)作为
文件。允许\u url\u fopen=On
;是否允许包括/要求
按以下方式打开URL(如http://或ftp://)
文件.allow\u url\u include=Off
;基于套接字的默认超时
流(秒)
默认\u套接字\u超时=60
我同意这看起来像是超时
您是否正在使用PHP5,如果是,您可以尝试使用file_get_contents()。编辑:
如果发现用户代理字符串有问题,可以通过创建并运行包含以下代码的文件来设置php使用的用户代理:
我认为在设置此项后,您必须重新启动IIS,但不能100%重新启动
注意:这是我提取的一个随机用户代理字符串,有很多,您可以将其设置为几乎任何您想要的内容。还有很多:
要检查allow_url_fopen是否打开,请执行以下操作:
让我们知道它是什么,然后我们可以指导您将其设置为您需要的内容。那么用户代理的区别是什么:如果这两个都是从fiddler发送的?第一个将从PHP生成一个到Google的请求,而不是从您的浏览器,因此他们将有不同的用户代理。这也可能是它…我相信ddler欺骗IE的用户代理,所以谷歌认为浏览器正在访问它,所以它会允许它。而PHP脚本将有一个不同的用户代理,谷歌可能不允许(因为它是一个脚本而不是一个浏览器)。我对这些都不是100%。基本上是一个带有phpinfo()的简单文件;说明让您知道此设置,否则,请询问您的系统管理员我认为如果未启用此设置,我们将不会达到超时(但不完全确定)是的,所有设置都如预期的那样。而文件_get_contents()也一样;基于套接字的流的默认超时(秒)默认\u socket\u timeout=60“为我做了一些技巧(Win2012r2,IIS8.5)。谢谢!谢谢你给出了清晰的答案。不过还没有发现问题。