php脚本可以停止吗?

时间:2012-10-25 15:18:12

标签: php paypal paypal-ipn

我正在尝试建立一个PayPal IPN系统,这是一个自动检查汇款的贝宝系统。它们提供了一个基本的系统脚本来完成它。

系统很简单,你的脚本上有$ _POST [],然后打开套接字而不是paypal,它们会在套接字中响应你有效或无效的字。

我的问题是打开插座,50%的时间我连接丢失了。当脚本连接时,我没有任何问题。所以我把它改成了20个小时,而不是1:

<?

//...

mail("mi@mail.com", "subject", "executing", "some headers"); //mailme when this is execute

$try = 20;
do{
  $fp = @fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 15);
  $try--;
}while($try>0 && !$fp);

if (!$fp) { // HTTP ERROR

mail("mi@mail.com", "subject", "error_message_not_connecting", "some headers");

} else {

mail("mi@mail.com", "subject", "connected_reading_socket", "some headers");

//fputs(..); and the loop reading working.

}

?>

在我的测试中,它现在100%的几个trys工作。但在实际转让中,它不会有20-30%的时间。我收到第一封邮件,但从来没有第二封邮件失败。

我在想..如果PayPal只打开与我的服务器的连接1秒,那么php脚本可以在一些尝试后停止,并停止继续吗?或任何想法在这里有什么问题?

4 个答案:

答案 0 :(得分:1)

发送邮件也会失败,尤其是在遇到网络问题时。您应该记录mail()和fsockopen的失败条件,以便之后可以重新访问它们。

此外,您的fsockopen可能会卡住。你有15秒的超时,你尝试20次,所以你的脚本将工作20 * 15 = 300秒= 5分钟,这可能比你的PHP脚本超时 - &gt; PHP会中途处理你的脚本,对吗?默认情况下,PHP中的最长执行时间仅为30秒。

答案 1 :(得分:0)

可以使用exit;停止PHP脚本。 您可以使用sleep(nr_sec)暂停php脚本处理。

答案 2 :(得分:0)

我曾经遇到过类似的问题。使用套接字时的奇怪行为。 更好地使用CURL,它更稳定。

http://leepeng.blogspot.com/2006/04/standard-paypal-php-integration.html

答案 3 :(得分:0)

我发现了错误。当用户关闭连接到服务器的连接时,可以停止php(通常通过浏览器上的单击停止按钮,或者在这种情况下通过paypal关闭套接字)。

有三种方法可以停止脚本。

1 - 完成脚本 2 - 用户关闭服务器的连接 3-by timeout

我使用函数ignore_user_abort(true),我没有更多问题。

http://php.net/manual/en/function.ignore-user-abort.php