Bug #67884 [Opn]: Doing a request to itself causes a lock
Edit report at https://bugs.php.net/bug.php?id=67884&edit=1
ID: 67884
Updated by: requinix@php.net
Reported by: jgmdev@php.net
Summary: Doing a request to itself causes a lock
Status: Open
Type: Bug
Package: Built-in web server
Operating System: Linux (Archlinux)
PHP Version: 5.5.15
Block user comment: N
Private report: N
New Comment:
With a sleep(1) in the router script I get
Concurrency Level: 100
Time taken for tests: 1000.604 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 121000 bytes
HTML transferred: 0 bytes
Requests per second: 1.00 [#/sec] (mean)
Time per request: 100060.414 [ms] (mean)
Time per request: 1000.604 [ms] (mean, across all concurrent requests)
Transfer rate: 0.12 [Kbytes/sec] received
Given X=number of concurrent requests served by PHP, and a sleep(1) to account for the various
"per second"-s, the report will say:
- Time taken: 1000 [total time] / X
- Requests per second: X
- Mean time per request: 100 [concurrent requests by AB] * 1000 [msec. each] / X
So it's not concurrent. Besides, I don't see any threading or forking going on in the
source code.
Previous Comments:
------------------------------------------------------------------------
[2014-08-22 13:10:34] jgmdev@php.net
I tested with ab -c 100 -n 1000 http://localhost:8001/ and a
router file that doesn't request it self:
<?php print "something";
And here are the results, which shows that the built-in server does supports concurrency/threading
(unless it is happening so fast that feels like threading):
Concurrency Level: 100
Time taken for tests: 0.075 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 118000 bytes
HTML transferred: 7000 bytes
Requests per second: 13335.82 [#/sec] (mean)
Time per request: 7.499 [ms] (mean)
Time per request: 0.075 [ms] (mean, across all concurrent requests)
Transfer rate: 1536.75 [Kbytes/sec] received
Also the meaning of "PHP applications will stall if a request is blocked" isn't
clear.
------------------------------------------------------------------------
[2014-08-22 04:17:37] requinix@php.net
Isn't the server single-threaded? The docs say right there at the top "PHP applications
will stall if a request is blocked".
------------------------------------------------------------------------
[2014-08-22 03:28:22] jgmdev@php.net
Description:
------------
The built-in testing webserver locks down if current executing script makes a request using
file_get_contents, get_headers, as any function which supports the http://
streams that makes a request to itself.
With the router test script provided try:
php -S localhost:8001 router-test.php
wget http://localhost:8001/something (works fine)
wget http://localhost:8001/ (lock when requesting /something)
Test script:
---------------
<?php
$path = "";
if(isset($_SERVER["PHP_SELF"]))
{
$path .= ltrim($_SERVER["PHP_SELF"], "/");
}
if($path == "something")
{
print "something";
}
else
{
print "nothing";
// Locks here
print file_get_contents("http://localhost:8001/something");
}
Expected result:
----------------
Request to http://localhost:8001/ should print nothingsomething
Actual result:
--------------
The php built-in webserver locks when trying to request http://localhost:8001/something.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=67884&edit=1
Thread (7 messages)