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] f...@php.net 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