Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How could I stop PHP from returning headers when executed from commandline?

This may be a ridiculous question, but it's been bothering me for a while. I have a mail forwarder piped to a PHP script, it receives perfectly, however I have the following error mailed back to me instantly:

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 mobile@[mydomain]

The following text was generated during the delivery attempt:

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

As you can see, Exim thinks the header response an error from the script I have. The script can receive the Email perfectly from php://stdin but Exim is quick-replying with the error.

Plus,

  • It's running from console, not Apache so HTAccess or configuring Apache most likely would do nothing.
  • I can not find any solution, or anyone with the same problem.

So my question is: How to I get rid of those two headers?

Thanks, ~Jonny

Edit, Source:

    #!/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);
like image 304
JonnyLitt Avatar asked Mar 14 '10 20:03

JonnyLitt


People also ask

How do I stop a PHP script from process?

In PHP, a coder can terminate the execution of a script by specifying a method/function called the exit() method in a script. Even if the exit() function is called, the shutdown functions and object destructors will be executed without interruption.

What PHP can do with header () command?

The header() function in PHP sends a raw HTTP header to a client or browser. Before HTML, XML, JSON, or other output is given to a browser or client, the server sends raw data as header information with the request (particularly HTTP Request).

Does header end the script PHP?

header() will not stop the script and things below will continue to be parsed. If you scroll down to the comments on the php function page for exit(), some people have added hints and tips to make this action a little cleaner... if you feel up for a challenge!


2 Answers

looks like you're running php-cgi while you need php-cli (just "php"). Run php -v to make sure. If cgi is the case, try "-q" option.

like image 116
user187291 Avatar answered Sep 28 '22 06:09

user187291


Had the same issue. My hosts told me I could use php-5.4-cli (normally I used php-5.4).

Adding -cli worked for me.

like image 28
gelviis Avatar answered Sep 28 '22 08:09

gelviis