Devi solo essere consapevole che paypal chiama lo script per i dati IPN "in background", cioe' lo script non viene chiamato dal browser di chi naviga. Il che significa che non puoi fare debug con echo a video e roba simile. Devi per forza scrivere in un file per capire cosa non va in quello script.
una roba tipo
codice:
if (!$fp) 
{
scrivi_nel_file('morto 1');
} 
else 
{
    scrivi_nel_file('morto 2');
    fputs ($fp, $header . $req);
    while (!feof($fp)) 
    {
        $res = fgets ($fp, 1024);
        scrivi_nel_file('morto 3');
        if (strcmp ($res, "VERIFIED") == 0) 
        { 
           scrivi_nel_file('morto 4');

.... e cosi via
cosi' facendo capisci esattamente cos'e' che non va nello script.