PHP fopen yanıt olarak başarısız

3 Cevap php

Ben php bir googles almak arama url yaparken sorun yaşıyorum. İşte var kod:

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

İşte alıyorum hata var:

PHP Warning: fopen(http://www.google.com/complete/search?hl=en&js=true&qu=cat): failed to open stream: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in C:\Inetpub\test\google.php on line 3 PHP Fatal error: Maximum execution time of 60 seconds exceeded in C:\Inetpub\test\google.php on line 3

Fiddler kullanarak ve kendisi çalışıyor url üzerinde bir istek yapıyor, ama nedense php değil değilim. Herkes neden herhangi bir fikrin var mı?

güncelleme: İşte benim 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;
}

Ve burada benim html:

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

3 Cevap

Edit:

If it turns out you are having user agent string problems, you can set the user-agent php uses by creating and running a file with the following code in it: <?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'); ?>

Bunu ayarladıktan sonra IIS yeniden başlatmanız gerekecek sanırım, ama bu değil 100%.

Note: Bu ben çekti rastgele bir kullanıcı aracısı dizesi, pek çok orada var, istediğiniz için çok fazla bir şey ayarlayabilirsiniz. Daha pek çok az vardır: http://www.useragentstring.com/


Allow_url_fopen açık olup olmadığını kontrol etmek için, bu do:

  1. Sunucunuzda bir php dosyası oluşturun, istediğiniz ne olursa olsun bunun adı.
  2. Dosyanızın içine koymak <?php phpinfo(); ?>
  3. Bunu kullanarak eğer bir web tarayıcısı veya fiddler aracılığıyla sunucu üzerinde komut dosyası çalıştırmak
  4. gerekli tüm ayarları kontrol edin.

O zaman ne gerek bunu ayarlarken size yürüyebilir, bize ne olduğunu bilsin.

Bu bir zaman aşımı gibi görünüyor. Bu sunucu USER_AGENT dayalı ayrımını istekleri ile iletişim kurmak için çalışıyoruz olabilir.

Eğer php.ini allow_url_fopen AÇIK doğrulandı mı? Ayrıca default_socket_timeout?

; Whether to allow the treatment of URLs (like http:// or ftp://) as files. allow_url_fopen = On

; Whether to allow include/require to open URLs (like http:// or ftp://) as files. allow_url_include = Off

; Default timeout for socket based streams (seconds) default_socket_timeout = 60

Ben bir zaman aşımı gibi görünüyor katılıyorum.

PHP 5 ile çalışıyorsanız eğer öyleyse, sen) (file_get_contents deneyebilirsiniz.