php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #14170 #!/path/to/php shows up on every php script
Submitted: 2001-11-22 03:49 UTC Modified: 2002-04-10 19:27 UTC
From: jgarrett at byu dot edu Assigned:
Status: Closed Package: *General Issues
PHP Version: 4.0CVS-2001-11-22 OS: Linux RH 7.1
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: jgarrett at byu dot edu
New email:
PHP Version: OS:

 

 [2001-11-22 03:49 UTC] jgarrett at byu dot edu
#!/path/to/php shows up at the top of every php script

-- script --
#!/path/to/php
<?php phpinfo();?>
-- /script --

Running latest php4 CVS as CGI, Apache 1.3.20, no modules

A similar bug was reported in the past (#9041, #8898, #8782) but I'm running the latest CVS.

The following modification seemed to do the trick:

? .cgi_main.c.swp
? cdig.diff
Index: cgi_main.c
===================================================================
RCS file: /repository/php4/sapi/cgi/cgi_main.c,v
retrieving revision 1.138
diff -u -r1.138 cgi_main.c
--- cgi_main.c  11 Nov 2001 23:11:23 -0000      1.138
+++ cgi_main.c  22 Nov 2001 08:09:48 -0000
@@ -729,18 +729,18 @@
                        }
                        file_handle.filename = argv0;
                        file_handle.opened_path = expand_filepath(argv0, NULL TSRMLS_CC);
-               } else if (retval == SUCCESS) {
-                       /* #!php support */
-                       c = fgetc(file_handle.handle.fp);
-                       if (c == '#') {
-                               while (c != 10 && c != 13) {
-                                       c = fgetc(file_handle.handle.fp);       /* skip to end of line */
-                               }
-                               CG(zend_lineno)++;
-                       } else {
-                               rewind(file_handle.handle.fp);
+               }
+               /* #!php support */
+               c = fgetc(file_handle.handle.fp);
+               if (c == '#') {
+                       while (c != 10 && c != 13) {
+                               c = fgetc(file_handle.handle.fp);       /* skip to end of line */
                        }
+                       CG(zend_lineno)++;
+               } else {
+                       rewind(file_handle.handle.fp);
                }
+

                switch (behavior) {
                        case PHP_MODE_STANDARD:

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-11-22 04:10 UTC] mfischer@php.net
Cannot reproduce this:

$ cat test.php 
#!/home/mfischer/php4/bin/php -q
<?
  echo "test\n";
?>

mfischer@debian:~$ ./test.php 
test
mfischer@debian:~$ php -f test.php 
test
mfischer@debian:~$ php -v
4.2.0-dev


 [2001-11-22 10:35 UTC] sander@php.net
Nope, this bug only shows up if you run it through CGI. Running from the command-line works fine.
 [2001-11-22 10:50 UTC] sander@php.net
Nope, this bug only shows up if you run it through CGI. Running from the command-line works fine.
 [2001-11-22 10:54 UTC] jmoore@php.net
Sounds like a misconfiguration to me.
 [2001-11-22 12:23 UTC] mfischer@php.net
Err ... whats the point of using this in a CGI?

I understand, some kind of portability probably (running it from CMD and CGI) but this is some dirty magic stuff IMHO. 

Its just a text file which gets processed and when it starts with #! then it starts with #! and therefore the output shall be #!.

However, I've an open mind for that :)
 [2001-11-22 13:00 UTC] sander@php.net
No, the point is if you run a script as a conventional CGI-script (just like you can run shell scripts through CGI), the line with #!/path/to/php shows up...
Normally, if you run PHP as CGI via Apache, some lines in httpd.conf say that *.php should be parsed through /usr/local/bin/php
It's not necessary to use that. Alternatively, you could use #!/path/to/php if the server has (plain) CGI enabled. It's usefull i.e. if you have built a dev-version of PHP somewhere and don't want to install it, but just use it for a few scripts to test new functionality.

And about magic stuff: the patch which hides #! when running via the command line, has already been commited... isn't that magic too?


Workaround: enable output buffering in your php.ini and start your scripts with ob_end_clean();.
 [2001-11-22 15:17 UTC] sniper@php.net
Duplicate of #9041
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sun Jan 19 14:01:28 2025 UTC