2010-03-14 7 views
6

Das mag eine lächerliche Frage sein, aber es stört mich eine Weile. Ich habe eine E-Mail-Weiterleitung an einen PHP-Skript geleitet, es perfekt empfängt, jedoch habe ich die folgende Fehlermeldung per Post sofort zu mir zurück:Wie kann ich verhindern, dass PHP Header zurückgibt, wenn es von der Kommandozeile ausgeführt wird?

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 

Wie Sie sehen können, Exim die Header-Antwort einen Fehler aus dem Skript denkt Ich habe. Das Skript kann die Email perfekt von php: // stdin empfangen, aber Exim antwortet schnell mit dem Fehler.

Plus

  • Es ist von der Konsole ausgeführt wird, nicht so HTAccess Apache oder Konfiguration Apache höchstwahrscheinlich würde nichts tun.
  • Ich kann keine Lösung finden, oder jemand mit dem gleichen Problem.

Also meine Frage ist: Wie kann ich diese beiden Header loswerden?

Danke, ~ Jonny

bearbeiten, Quelle:

#!/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); 

Antwort

14

sieht aus wie Sie php-cgi laufen lassen, während Sie php-cli (nur "php") benötigen. Führen Sie php -v aus, um sicherzugehen. Wenn CGI der Fall ist, versuchen Sie "-q" -Option.

+0

Soweit ich es mit php -v versucht habe, habe ich "Content-type: text/html" zurückgespuckt. Ich habe es mit der Option -q versucht und es hat immer noch die Header zurückgegeben. Exim ist immer noch ziemlich empfindlich mit ihm. – JonnyLitt

+1

versuchen, Header hinzuzufügen ('Content-type:'); an den Anfang Ihres Skripts. Auch Checkout http://www.php.net/manual/en/function.header-remove.php –

+0

eep, Did, das Problem ist: Ich habe kein PHP <= 5.3.0 (benötigt für Header_remove), eher Version 5.2.4. Ich kann auch nicht aktualisieren, weil ich auf einem geteilten Host bin und sie haben dagegen argumentiert, dass es in den neueren PHP-Versionen paranoid ist. – JonnyLitt

0

Hatte das gleiche Problem. Meine Gastgeber sagten mir, ich könnte php-5.4-cli verwenden (normalerweise benutzte ich php-5.4).

Hinzufügen -cli arbeitete für mich.