|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2010-06-13 13:38 UTC] 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
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 28 18:00:01 2025 UTC |
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.......