add tests for PATH_INFO

update php_cli_server.inc to support no router server
This commit is contained in:
Xinchen Hui 2011-10-23 13:57:25 +00:00
parent f17a215493
commit 455bc9df4c
2 changed files with 108 additions and 5 deletions

View File

@ -1,10 +1,10 @@
<?php
define ("PHP_CLI_SERVER_ADDRESS", "localhost:8964");
function php_cli_server_start($code = 'echo "Hello world";') {
function php_cli_server_start($code = 'echo "Hello world";', $no_router = FALSE) {
$php_executable = getenv('TEST_PHP_EXECUTABLE');
$doc_root = __DIR__;
$router = "router.php";
$router = "index.php";
file_put_contents($doc_root . '/' . $router, '<?php ' . $code . ' ?>');
$descriptorspec = array(
@ -13,14 +13,18 @@ function php_cli_server_start($code = 'echo "Hello world";') {
2 => STDERR,
);
$cmd = "exec {$php_executable} -t {$doc_root} -S " . PHP_CLI_SERVER_ADDRESS . " {$router}";
$cmd = "exec {$php_executable} -t {$doc_root} -S " . PHP_CLI_SERVER_ADDRESS;
if (!$no_router) {
$cmd .= " {$router}";
}
$handle = proc_open($cmd, $descriptorspec, $pipes, $doc_root);
register_shutdown_function(
function($handle) {
function($handle) use($router) {
proc_terminate($handle);
@unlink(__DIR__ . "/router.php");
@unlink(__DIR__ . "/{$router}");
},
$handle
);

View File

@ -0,0 +1,99 @@
--TEST--
PATH_INFO (relevant to #60112)
--DESCRIPTION--
After this fix(#60112), previously 404 request like "localhost/foo/bar"
now could serve correctly with request_uri "index.php" and PATH_INFO "/foo/bar/"
--SKIPIF--
<?php
include "skipif.inc";
if (substr(PHP_OS, 0, 3) == 'WIN') {
die ("skip not for Windows");
}
?>
--FILE--
<?php
include "php_cli_server.inc";
php_cli_server_start('var_dump($_SERVER["PATH_INFO"]);', TRUE);
list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
$port = intval($port)?:80;
$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
if (!$fp) {
die("connect failed");
}
if(fwrite($fp, <<<HEADER
GET /foo/bar HTTP/1.1
Host: {$host}
HEADER
)) {
while (!feof($fp)) {
echo fgets($fp);
}
}
fclose($fp);
$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
if (!$fp) {
die("connect failed");
}
if(fwrite($fp, <<<HEADER
GET /foo/bar/ HTTP/1.0
Host: {$host}
HEADER
)) {
while (!feof($fp)) {
echo fgets($fp);
}
}
fclose($fp);
$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
if (!$fp) {
die("connect failed");
}
if(fwrite($fp, <<<HEADER
GET /foo/bar.js HTTP/1.0
Host: {$host}
HEADER
)) {
while (!feof($fp)) {
echo fgets($fp);
break;
}
}
fclose($fp);
?>
--EXPECTF--
[%s] %s
HTTP/1.1 200 OK
Host: %s
Connection: closed
X-Powered-By: PHP/%s-dev
Content-type: text/html
string(8) "/foo/bar"
[%s] %s
HTTP/1.0 200 OK
Host: %s
Connection: closed
X-Powered-By: PHP/5.5.0-dev
Content-type: text/html
string(9) "/foo/bar/"
[%s] %s
HTTP/1.0 404 Not Found