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

Reply via email to