Search code examples
phppaypalpaypal-ipn

php script can be stopped?


I'm trying to make a paypal IPN system, this is a system of paypal to automatically check money transfers. They provide a basic system script to do it.

The system is easy, you get $_POST[] on your script, and then open a socket versus paypal, and they response to you valid or invalid word in the socket.

My problem is that opening the socket, 50% of times i'm getting connection lost. When the script connect, I don't have any problem. So I changed it to 20 trys, instead 1:

<?

//...

mail("[email protected]", "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("[email protected]", "subject", "error_message_not_connecting", "some headers");

} else {

mail("[email protected]", "subject", "connected_reading_socket", "some headers");

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

}

?>

In my test, it works now 100% of severals trys. But in real transfers, it doesn't work 20-30% of times. I'm getting the 1st mail, but never the second one in that fails.

I'm thinking.. If paypal only open the connection to my server 1 second, can the php script stop after some trys, and stop going on? or any idea what is wrong here?


Solution

  • I found the error. A php can be stopped when a users close the conection to the server (usually by click stop button on browser, or in this case a socket closed by paypal).

    There are 3 ways to stop a script.

    1-by finish the script 2-by user closeing the conection to the server 3-by timeout

    I used the function ignore_user_abort(true), and I dont have more problems.

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