2014-01-15 21 views
0

我有一个网站,我几个星期前写了一个问题。 我的网站通过API托管在网站上的另一个网站__2_2_2Jquery >> PHP >> cURL和浏览器刷新

curl操作通过查询POST请求到一个PHP文件。 如果由于某种原因操作需要更长的时间(我不能确定原因)和用户点击刷新..发送到API的命令已完成但我的服务器没有得到任何结果,所以不能登录或做任何与此结果.. 有没有办法来保持这种交易的完整性?下面 是我的代码,我仍然可以不管结果是在WEBSITE_2

function doCommit($url_) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url_); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.23 (Windows NT 5.1; U; en)'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_TIMEOUT,5); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5); 
    $commit = curl_exec($ch); 
    curl_close($ch); 
    if(!curl_exec($ch)) 
    { 
    $ERROR="<Transaction> 
      <Result>Failed</Result> 
      <Reason>Operation Timed Out</Reason> 
     </Transaction>"; 
    $oXML = new SimpleXMLElement($ERROR); 
    return $oXML; 
    } 
    else{ 
    $oXML = new SimpleXMLElement($commit); 
    return $oXML; 
    } 
    // return $oXML->Reason; 
} 
+0

如果WEBSITE_2下跌例如应该发生什么解决呢?你是否在curl请求中设置了超时值? – zeflex

回答

0

您可以使用卷曲参数来解决问题设置了“请求超时”失败:

CURLOPT_TIMEOUT - 集的数量在卷曲单个函数超时之前等待几秒钟。

CURLOPT_CONNECTTIMEOUT - 设置卷曲连接超时之前的最长时间。

...然后如果curl_exec失败,你可以返回文本:

if(curl_exec($curl) === false) 
{ 
    echo 'ERROR: ' . curl_error($curl); 
} 
+0

请参阅我的更新后的帖子,包括我的代码 –

0

通过下面的代码

function doCommit($url_) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url_); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.23 (Windows NT 5.1; U; en)'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_TIMEOUT,2); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,2); 
    $commit = curl_exec($ch); 
    curl_close($ch); 
    if(curl_errno($ch) == 0) 
    { 
    $oXML = new SimpleXMLElement($commit); 
    return $oXML; 
    } 
    else{ 
    $ERROR="<Transaction> 
      <Result>Failed</Result> 
      <Reason>Operation Timed Out</Reason> 
     </Transaction>"; 
    $oXML = new SimpleXMLElement($ERROR); 
    return $oXML; 
    } 
    // return $oXML->Reason; 
} 
相关问题