Edit report at http://bugs.php.net/bug.php?id=52075&edit=1
ID: 52075
User updated by: luk-4u at hotmail dot com
Reported by: luk-4u at hotmail dot com
Summary: php -b 127.0.0.1 vs php -y php-fpm.conf -x
Status: Closed
Type: Bug
Package: FPM related
Operating System: ubuntu 9.04
PHP Version: 5.2.13
Assigned To: fat
New Comment:
To whomever maintains those code, i really recommond them to specify
much more exact, accurate, detailed information for this 'bug', thanks.
Finally i found out the why, tsrm_virtual_cwd.c :
....................
if (use_realpath != CWD_EXPAND) {
#if !defined(TSRM_WIN32) && !defined(NETWARE)
char resolved_path[MAXPATHLEN];
if (!realpath(path, resolved_path)) { /* Note: Not threadsafe on older
*BSD's */
perror("realpath error:");
if (use_realpath == CWD_REALPATH) {
printf("=====================%d\n", __LINE__);
return 1;
}
goto no_realpath;
}
..........................
perror outputs Permission denied, so why don't u enlarge this
information somewhere in the error log, i mean to let the user have some
place to figure out, maybe it's comsumptive in production environment,
but u can enable it in a debug compile, and i know this block of code is
not FPM specific.
Maybe because i'm a newbie in this field, miraclely placed the webroot
in my home directory, which other users' process doesn't have permission
to go through, but i think 'No input file specified' is really too
short, too expert-speaking.......
Previous Comments:
------------------------------------------------------------------------
[2010-06-13 15:56:42] [email protected]
FPM is not supported on 5.2.x and your revision is old as the conf file
is
formatted in XML (now it's INI).
Please use 5.3.x from http://snaps.php.net/
If you're using the FPM patch from http://php-fpm.org to use FPM on
5.2.x,
please ask on the FPM mailing list
(http://groups.google.com/group/highload-php-
en).
++ Jerome
------------------------------------------------------------------------
[2010-06-13 13:41:48] luk-4u at hotmail dot com
"As i tested, while started as the 1st way, this function return 0, and
the tsrm_realpath returns NULL'
This sentence was written wrong, correct is : the 1st way returns 0; the
second returns 1;
------------------------------------------------------------------------
[2010-06-13 13:38:07] luk-4u at hotmail dot com
Description:
------------
As starting php-cgi in 2 ways, the 2 results were different.
1./path/to/php-cgi -b 127.0.0.1:9000
2./path/to/php-cgi -y /path/to/php-fpm.conf -x
The first one was correct.
The second, which said: 'No input file specified'.
As i tracked down the c code, i found out the reason finally, but dunno
why still.
/php/to/phpsrc/TSRM/tsrm_virtual_cwd.c
CWD_API int virutal_file_ex(cwd_state *state,.....)
around line 1339
the exact code block:
#if !defined(TSRM_WIN32) && !defined(NETWARE)
..........
if (use_realpath == CWD_REALPATH) {
return 1;
}
goto no_realpath;
It's the above function that keeps the problem presenting..
As i tested, while started as the 1st way, this function return 0, and
the tsrm_realpath returns NULL, also tsrm_realpath was called from
init_request_info. I think u must be familiarer with the code.
And the 2cd way was all right.
Here is my nginx(0.6.39) conf block:
server {
listen 80;
server_name pk.local.com;
index index.php;
root /home/zyk/pk_local;
location / {
root /home/zyk/pk_local;
fastcgi_pass 127.0.0.1:9000;
# fastcgi_pass
unix:/usr/local/app/php/logs/php.sock;
fastcgi_index index.php;
fastcgi_intercept_errors on;
include fcgi.conf;
include fastcgi_params.default;
}
}
}
Dir /home/zyk/pk_local is RW for the php daemon userid.
Here is my php configure option:
configure --enable-fastcgi --enable-fpm --enable-mbstring
--prefix=/usr/local/app/php
Here is my php-fpm.conf
<?xml version="1.0" ?>
<configuration>
All relative paths in this config are relative to php's install prefix
<section name="global_options">
Pid file
<value
name="pid_file">/usr/local/app/php/logs/php-fpm.pid</value>
Error log file
<value
name="error_log">/usr/local/app/php/logs/php-fpm.log</value>
Log level
<value name="log_level">notice</value>
When this amount of php processes exited with SIGSEGV or SIGBUS
...
<value name="emergency_restart_threshold">10</value>
... in a less than this interval of time, a graceful restart
will be
initiated.
Useful to work around accidental curruptions in accelerator's
shared
memory.
<value name="emergency_restart_interval">1m</value>
Time limit on waiting child's reaction on signals from master
<value name="process_control_timeout">5s</value>
Set to 'no' to debug fpm
<value name="daemonize">no</value>
</section>
<workers>
<section name="pool">
Name of pool. Used in logs and stats.
<value name="name">default</value>
Address to accept fastcgi requests on.
Valid syntax is 'ip.ad.re.ss:port' or just 'port' or
'/path/to/unix/socket'
<value name="listen_address">127.0.0.1:9000</value>
<value name="listen_options">
Set listen(2) backlog
<value name="backlog">-1</value>
Set permissions for unix socket, if one used.
In Linux read/write permissions must be set in
order to allow
connections from web server.
Many BSD-derrived systems allow connections
regardless of
permissions.
<value name="owner">nobody</value>
<value name="group">nobody</value>
<value name="mode">0666</value>
</value>
Additional php.ini defines, specific to this pool of
workers.
<value name="php_defines">
<!-- <value name="sendmail_path">/usr/sbin/sendmail
-t
-i</value> -->
<!-- <value name="display_errors">0</value>
-->
<value name="SERVER_SOFTWARE">nginx</value>
</value>
Unix user of processes
<value name="user">nobody</value>
Unix group of processes
<value name="group">nobody</value>
Process manager settings
<value name="pm">
Sets style of controling worker process count.
Valid values are 'static' and 'apache-like'
<value name="style">static</value>
Sets the limit on the number of simultaneous
requests that will be
served.
Equivalent to Apache MaxClients directive.
Equivalent to PHP_FCGI_CHILDREN environment in
original php.fcgi
Used with any pm_style.
<value name="max_children">5</value>
Settings group for 'apache-like' pm style
<value name="apache_like">
Sets the number of server processes
created on startup.
Used only when 'apache-like' pm_style
is selected
<value name="StartServers">20</value>
Sets the desired minimum number of idle
server processes.
Used only when 'apache-like' pm_style
is selected
<value name="MinSpareServers">5</value>
Sets the desired maximum number of idle
server processes.
Used only when 'apache-like' pm_style
is selected
<value name="MaxSpareServers">35</value>
</value>
</value>
The timeout (in seconds) for serving a single request
after which the
worker process will be terminated
Should be used when 'max_execution_time' ini option
does not stop
script execution for some reason
'0s' means 'off'
<value name="request_terminate_timeout">0s</value>
The timeout (in seconds) for serving of single request
after which a
php backtrace will be dumped to slow.log file
'0s' means 'off'
<value name="request_slowlog_timeout">0s</value>
The log file for slow requests
<value name="slowlog">logs/slow.log</value>
Set open file desc rlimit
<value name="rlimit_files">1024</value>
Set max core size rlimit
<value name="rlimit_core">0</value>
Chroot to this directory at the start, absolute path
<value name="chroot"></value>
Chdir to this directory at the start, absolute path
<value name="chdir"></value>
Redirect workers' stdout and stderr into main error log.
If not set, they will be redirected to /dev/null,
according to
FastCGI specs
<value name="catch_workers_output">yes</value>
How much requests each process should execute before
respawn.
Useful to work around memory leaks in 3rd party
libraries.
For endless request processing please specify 0
Equivalent to PHP_FCGI_MAX_REQUESTS
<value name="max_requests">500</value>
Comma separated list of ipv4 addresses of FastCGI
clients that
allowed to connect.
Equivalent to FCGI_WEB_SERVER_ADDRS environment in
original php.fcgi
(5.2.2+)
Makes sense only with AF_INET listening socket.
<value name="allowed_clients">127.0.0.1</value>
Pass environment variables like LD_LIBRARY_PATH
All $VARIABLEs are taken from current environment
<value name="environment">
<value name="HOSTNAME">$HOSTNAME</value>
<value
name="PATH">/usr/local/bin:/usr/bin:/bin</value>
<value name="TMP">/tmp</value>
<value name="TMPDIR">/tmp</value>
<value name="TEMP">/tmp</value>
<value name="OSTYPE">$OSTYPE</value>
<value name="MACHTYPE">$MACHTYPE</value>
<value name="MALLOC_CHECK_">2</value>
</value>
</section>
</workers>
</configuration>
As i dunno if it's a bug yet, maybe it's configuration problem. But
there is really no easy way to solve this particular stuff.
Any suggestions?
Thanks in advance.
Test script:
---------------
no test script
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52075&edit=1