调试curl_exec

时间:2010-07-30 11:03:48

标签: php

我最近在paypal ipn模块中调试curl函数时非常困难。

以下是我们使用的模块:http://www.oscommerce.com/community/contributions,2679但相关代码如下。

我在约5%的交易中遇到此错误。它会导致订单无法更新为付费状态。

我已经确定它是curl_exec失败并停止进一步处理脚本。 cpanel上的错误日志中没有与此相关的错误。

我试过改变curl和php超时持续时间而没有改变。我尝试过使用try和catch,但这也没有帮助。

由于脚本在点击curl_exec时停止执行,我无法使用curl_error获取有关该问题的任何反馈。

我查看了传递给IPN的参数,但它们没问题。

我觉得我已经尽了所能来确定这个问题的原因并且没有在哪里。

如果脚本使用fsock作为主要的连接方法,我会遇到同样的问题。

如果有人对其他调试此问题的方法有任何建议,我会很感激。

由于

if (MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER == 'Live') {
 $server = 'www.paypal.com';
} else {
 $server = 'www.sandbox.paypal.com';
}

$fsocket = false;
$curl = false;
$result = false;

if (function_exists('curl_exec')) {
 $curl = true;
} elseif ((PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://' . $server, 443, $errno, $errstr, 30)) ) {
 $fsocket = true;
} elseif ($fp = @fsockopen($server, 80, $errno, $errstr, 30)) {
 $fsocket = true;
}

if ($fsocket == true) {
 $header = 'POST /cgi-bin/webscr HTTP/1.0' . "\r\n" .
              'Host: ' . $server . "\r\n" .
              'Content-Type: application/x-www-form-urlencoded' . "\r\n" .
              'Content-Length: ' . strlen($parameters) . "\r\n" .
              'Connection: close' . "\r\n\r\n";

 @fputs($fp, $header . $parameters);

 $string = '';
 while (!@feof($fp)) {
  $res = @fgets($fp, 1024);
  $string .= $res;

  if ( ($res == 'VERIFIED') || ($res == 'INVALID') ) {
   $result = $res;

   break;
  }
 }

 @fclose($fp);



} elseif ($curl == true) {
 $ch = @curl_init();

 @curl_setopt($ch, CURLOPT_URL, 'https://' . $server . '/cgi-bin/webscr');
 @curl_setopt($ch, CURLOPT_POST, true);
 @curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
 @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 @curl_setopt($ch, CURLOPT_HEADER, false);
 @curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

 $result = @curl_exec($ch);

 curl_close($ch);
}

2 个答案:

答案 0 :(得分:0)

如果您使用"@" php将不再显示错误,它将抑制错误。所以我建议删除它,然后开始调试。

答案 1 :(得分:0)

我知道这并没有回答你如何让curl_exec正常工作的问题,但是你有充分的理由不仅仅使用fsock吗?我一直在fsock上运行我的IPN监听器,它就像一个魅力......