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
 [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

Add a Patch

Pull Requests

Add a Pull Request

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-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 26 14:01:29 2024 UTC