Bug #64951 [Opn->Nab]: SCRIPT_NAME acts strange
| From: | ab@php.net | Date: | Mon, 03 Jun 2013 07:29:40 +0000 |
| Subject: | Bug #64951 [Opn->Nab]: SCRIPT_NAME acts strange | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-179293@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=64951&edit=1
ID: 64951
Updated by: ab@php.net
Reported by: a dot panek at brainsware dot org
Summary: SCRIPT_NAME acts strange
-Status: Open
+Status: Not a bug
Type: Bug
Package: Built-in web server
Operating System: Linux & Windows
PHP Version: 5.4.15
-Assigned To:
+Assigned To: ab
Block user comment: N
Private report: N
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
Using the router script in the command line is the same as using mod_rewrite
with apache, basically something like this
RewriteEngine On
RewriteRule ^/hellou$ /hello.php [L]
is equivalent to
php -S localhost:8080 -t. hello.php
With this, requesting /hellou under apache will result
$_SERVER['SCRIPT_NAME'] => /hellou
__FILE__ => full path to hello.php
If you ommit the router script, you'll get the apache behaviour without
mod_rewrite. To do so, in your example
php -S localhost:8080 -t.
The current document root will be like a normal htdocs with apache.
Previous Comments:
------------------------------------------------------------------------
[2013-05-31 07:28:09] a dot panek at brainsware dot org
Description:
------------
When sending a request that has a file extension OR the request doesn't go to a
index.php (a test.php, e.g.), the SCRIPT_NAME holds the URI instead of the actual
current script name as documented here
http://php.net/manual/en/reserved.variables.server.php
"Contains the current script's path. This is useful for pages which need to point
to themselves. The __FILE__ constant contains the full path and filename of the
current (i.e. included) file."
So basically the built-in server doesn't act as documented except when you use a
file called "index.php" as router script and don't use a file extension in your
URI.
I tested this on Linux and Windows resulting in the exact same behaviour.
Test script:
---------------
<?php
# index.php
#
# php -S localhost:8080 -t. index.php
#
# curl -i -X GET -H 'Accept: application/json' localhost:8080/something.json
# -> '/something.json'
# curl -i -X GET -H 'Accept: application/json' localhost:8080/something
# -> '/index.php
#
# php -S localhost:8080 -t. test.php
# -> always the uri
echo $_SERVER['SCRIPT_NAME'];
?>
Expected result:
----------------
/index.php
Actual result:
--------------
/something.json
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64951&edit=1