2009-05-27 10 views
0

私が書いた以下の関数に奇妙な問題があります。簡単に説明すると、この関数はURLに接続し、curl関数を使用して出力をフェッチします。私はこの機能を実行すると、私はメッセージ「サーバーが予期せず接続落とし」を取得しかし、:curl_exec関数によりサーバが接続を切断する

/** 
* 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); 
    } 

を私は機能をデバッグするとき、私はcurl_exec()関数は、この問題を引き起こすことに気づきました。 curl_errorメッセージとPHPエラーは生成されません。

あなたは理由について考えていますか?あなたの情報はPHP.INIでsafe_modeが無効になっています。

ご協力いただきありがとうございます。

答えて

1

この関数をどのように呼びますか? $ ConnectTimeOutSecondsオプションをデフォルトの1にしておくと、CURLOPT_TIMEOUT設定が問題の原因になっている可能性があります。接続してページを返すには、おそらく1秒以上かかります。

+0

こんにちは$ ConnectTimeOutSecondsは1秒に設定されていても10秒または15秒に設定されていますが、「サーバーが予期せず接続を切断しました」というエラーではなく「false」を返すはずです。私が間違っている? – TamTam

+0

私は "false"と "Operation timed out"を1秒に設定して取得します。 $ URLがgoogle.comかsomesuchの場合、同じ「接続が切断されましたか? – cOle2

関連する問題