2010-03-14 4 views
6

Questa potrebbe essere una domanda ridicola, ma mi ha infastidito per un po '. Ho un mittente di posta convogliato ad uno script PHP, che riceve perfettamente, però ho il seguente errore inviato di nuovo a me immediatamente:Come posso impedire a PHP di restituire le intestazioni quando viene eseguito da riga di comando?

A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: 

    pipe to |/home/[webroot]/public_html/external/mobile/email.php 
    generated by [email protected][mydomain] 

The following text was generated during the delivery attempt: 

X-Powered-By: PHP/5.2.13 
Content-type: text/html 

Come si può vedere, Exim pensa la risposta di intestazione di un errore dal copione Io ho. Lo script può ricevere l'e-mail perfettamente da php: // stdin ma Exim sta rispondendo rapidamente con l'errore.

Inoltre,

  • E 'in esecuzione dalla console, non Apache così HTAccess o la configurazione di Apache molto probabilmente non avrebbe fatto nulla.
  • Non riesco a trovare alcuna soluzione o qualcuno con lo stesso problema.

Quindi la mia domanda è: come sbarazzarmi di quelle due intestazioni?

Grazie, ~ Jonny

Edit, Fonte:

#!/usr/bin/php 
<?php 
    $fd = fopen("php://stdin", "r"); 
     $email = ""; 
     while (!feof($fd)) { 
     $email .= fread($fd, 1024); 
     } 
     fclose($fd); 

     $dat = fopen(dirname(__FILE__).'/test.txt', 'w'); 
     fwrite($dat, $email); 
     fclose($dat); 

risposta

14

sembra si sta eseguendo php-cgi, mentre è necessario php-cli (solo "php"). Esegui php -v per essere sicuro. Se cgi è il caso, prova l'opzione "-q".

+0

Per quanto ho provato con php -v che ha restituito "Content-type: text/html", sono andato avanti e ho provato a eseguirlo con l'opzione -q e restituiva ancora le intestazioni. Exim è ancora piuttosto suscettibile. – JonnyLitt

+1

prova ad aggiungere un'intestazione ('Content-type:'); all'inizio del tuo script. Controlla anche http://www.php.net/manual/en/function.header-remove.php –

+0

eep, il problema è: non ho PHP <= 5.3.0 (necessario per Header_remove), piuttosto versione 5.2.4. Non posso aggiornarlo perché sono su un host condiviso e hanno discusso sul fatto che sia paranoico sui bug nelle nuove versioni di PHP. – JonnyLitt

0

Aveva lo stesso problema. I miei host mi hanno detto che potevo usare php-5.4-cli (normalmente ho usato php-5.4).

Aggiungere -cli ha funzionato per me.