2009-05-27 6 views
0

Ich habe ein seltsames Problem mit der folgenden Funktion, die ich geschrieben habe. Kurz gesagt, diese Funktion stellt eine Verbindung zu einer URL her und ruft die Ausgabe mithilfe von curl-Funktionen ab. Allerdings, wenn ich diese Funktion ausführen, erhalte ich eine Meldung „Server unerwartet die Verbindung beendet“:curl_exec Funktion verursacht Server die Verbindung zu trennen

/** 
* Connects to remote URL and posts parameters, returns the result 
* 
* @param string $URL 
* @param string $ArrayPostParameters 
* @param string $HTTPRequestType 
* @param string $HTTPAuth 
* @param string $HTTPAuthUsername 
* @param string $HTTPAuthPassword 
* @param string $ConnectTimeOutSeconds 
* @param string $ReturnHeaders 
* @return array 
* @author xxxxxxxxxx 
*/ 
function DataPostToRemoteURL($URL, $ArrayPostParameters, $HTTPRequestType = 'POST', $HTTPAuth = false, $HTTPAuthUsername = '', $HTTPAuthPassword = '', $ConnectTimeOutSeconds = 1, $ReturnHeaders = false) 
    { 
    $PostParameters = implode('&', $ArrayPostParameters); 

    $CurlHandler = curl_init(); 
     curl_setopt($CurlHandler, CURLOPT_URL, $URL); 

     if ($HTTPRequestType == 'GET') 
      { 
      curl_setopt($CurlHandler, CURLOPT_HTTPGET, true); 
      } 
     elseif ($HTTPRequestType == 'PUT') 
      { 
      curl_setopt($CurlHandler, CURLOPT_PUT, true); 
      } 
     elseif ($HTTPRequestType == 'DELETE') 
      { 
      curl_setopt($CurlHandler, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
      } 
     else 
      { 
      curl_setopt($CurlHandler, CURLOPT_POST, true); 
      curl_setopt($CurlHandler, CURLOPT_POSTFIELDS, $PostParameters); 
      } 

     curl_setopt($CurlHandler, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($CurlHandler, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($CurlHandler, CURLOPT_FOLLOWLOCATION, 5); 
     curl_setopt($CurlHandler, CURLOPT_CONNECTTIMEOUT, $ConnectTimeOutSeconds); 
     curl_setopt($CurlHandler, CURLOPT_TIMEOUT, $ConnectTimeOutSeconds); 
     curl_setopt($CurlHandler, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3'); 

     // The option doesn't work with safe mode or when open_basedir is set. 
     if ((ini_get('safe_mode') != false) && (ini_get('open_basedir') != false)) 
      { 
      curl_setopt($CurlHandler, CURLOPT_FOLLOWLOCATION, true); 
      } 

     if ($ReturnHeaders == true) 
      { 
      curl_setopt($CurlHandler, CURLOPT_HEADER, true); 
      } 
     else 
      { 
      curl_setopt($CurlHandler, CURLOPT_HEADER, false); 
      } 

     if ($HTTPAuth == true) 
      { 
      curl_setopt($CurlHandler, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
      curl_setopt($CurlHandler, CURLOPT_USERPWD, $HTTPAuthUsername.':'.$HTTPAuthPassword); 
      } 

     $RemoteContent = curl_exec($CurlHandler); 

    if (curl_error($CurlHandler) != '') 
     { 
     return array(false, curl_error($CurlHandler)); 
     } 

    curl_close($CurlHandler); 

    return array(true, $RemoteContent); 
    } 

Wenn ich die Funktion debuggt, bemerkte ich, dass curl_exec() Funktion dieses Problem verursacht. Keine curl_error Nachricht und kein PHP Fehler wird generiert.

Haben Sie eine Idee über Grund (e)? safe_mode ist in PHP.INI zu Ihrer Information deaktiviert.

Vielen Dank für Ihre Hilfe im Voraus!

Antwort

1

Wie rufen Sie diese Funktion auf? Wenn Sie die Option $ ConnectTimeOutSeconds auf dem Standardwert 1 belassen, verursacht die Einstellung CURLOPT_TIMEOUT möglicherweise das Problem, da die Verbindung und die Rückgabe der Seite wahrscheinlich länger als 1 Sekunde dauert.

+0

Hallo, $ ConnectTimeOutSeconds ist auf 10 oder 15 Sekunden eingestellt, auch wenn es auf 1 Sekunde eingestellt ist, sollte es "falsch" anstelle von "Server unerwartet unterbrochene Verbindung" Fehler geben? Liege ich falsch? – TamTam

+0

Ich bekomme "falsch" und "Zeitüberschreitung der Operation" mit 1 Sekunde eingestellt. Erhalten Sie die gleiche "unterbrochene Verbindung", wenn $ URL google.com oder so ist? – cOle2

Verwandte Themen