php - pcntl no funciona en Ubuntu ''por razones de seguridad''
(2)
Yo también tuve este problema. Ubuntu incluye algunos archivos de configuración de muestra de PHP en /usr/share/php5
: php.ini-production
es la plantilla para la configuración PHP del servidor web Apache ( /etc/php5/apache2/php.ini
) y deshabilita pcntl_fork y otras funciones . php.ini-production.cli
es la plantilla para PHP que se ejecuta desde la línea de comandos ( /etc/php5/cli/php.ini
), incluida la ejecución de pruebas, y no desactiva ninguna función. Pero de alguna manera mi /etc/php5/cli/php.ini
era una copia de la configuración de Apache que deshabilita estas funciones.
No estoy seguro de cómo sucedió esto. Instalé mi pila LAMP con Ubuntu 12.04. Mi archivo /etc/php5/cli/php.ini
data de octubre de 2013, sugiriendo que Ubuntu 13.10 lo configure; Tal vez esa versión copió el archivo equivocado. Las actualizaciones de Ubuntu actualizan los archivos de muestra en /usr/share/php5
pero dejan los archivos en /etc/
alone.
Para solucionarlo utilicé
$ sudo cp -pi /usr/share/php5/php.ini-production.cli /etc/php5/cli/php.ini
para copiar el archivo de configuración de línea de comandos predeterminado. Obviamente, si ha realizado cambios en la configuración de PHP5 de la línea de comandos, esto los sobrescribirá; Usa tus habilidades de UNIX para diferenciarlas y fusionarlas.
He instalado pcntl en mi PHP 5.4.6 que se ejecuta en Ubuntu 32-bit 12.10, usando this artículo.
No fue fácil en absoluto porque después de compilar, al ejecutar make test
obtuve los siguientes errores. Cada vez recibo una advertencia de que estoy tratando de bifurcar un proceso secundario que dice:
Advertencia: pcntl_fork () se ha deshabilitado por razones de seguridad en /var/www/mydev/dev/mailServiceTest.php en la línea 8
Busqué una solución en toda la web, pero desafortunadamente no encontré ninguna mención de este problema en ningún otro lugar.
Build complete.
Don''t forget to run ''make test''.
PHP Warning: Module ''pcntl'' already loaded in Unknown on line 0
PHP Warning: Module ''pcntl'' already loaded in Unknown on line 0
=====================================================================
PHP : /usr/bin/php
Warning: Module ''pcntl'' already loaded in Unknown on line 0
PHP_SAPI : cli
PHP_VERSION : 5.4.6-1ubuntu1.2
ZEND_VERSION: 2.4.0
PHP_OS : Linux - Linux oleg-Lenovo-G580 3.5.0-26-generic #42-Ubuntu SMP Fri Mar 8 23:20:06 UTC 2013 i686
INI actual : /php/php-5.4.6/ext/pcntl/tmp-php.ini
More .INIs :
CWD : /php/php-5.4.6/ext/pcntl
Extra dirs :
VALGRIND : Not used
=====================================================================
TIME START 2013-04-28 12:11:03
=====================================================================
FAIL Test pcntl wait functionality [tests/001.phpt]
FAIL pcntl: pcntl_sigprocmask(), pcntl_sigwaitinfo(), pcntl_sigtimedwait() [tests/002.phpt]
FAIL pcntl: SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK [tests/003.phpt]
FAIL Bug #47566 (return value of pcntl_wexitstatus()) [tests/bug47566.phpt]
FAIL pcntl_alarm() [tests/pcntl_alarm.phpt]
FAIL pcntl_exec() [tests/pcntl_exec.phpt]
FAIL pcntl_exec() 2 [tests/pcntl_exec_2.phpt]
FAIL pcntl_exec() 3 [tests/pcntl_exec_3.phpt]
FAIL Test function pcntl_fork() by calling it with its expected arguments [tests/pcntl_fork_basic.phpt]
FAIL Test function pcntl_fork() by testing the process isolation in the forking hierarchy father -> son -> grandson where father can not knows his grandson [tests/pcntl_fork_variation.phpt]
FAIL Test pcntl_get_last_error() [tests/pcntl_get_last_error.phpt]
FAIL pcntl_signal() [tests/pcntl_signal.phpt]
FAIL pcnt_signal_dispatch() [tests/pcntl_signal_dispatch.phpt]
FAIL pcntl_wait() [tests/pcntl_wait.phpt]
FAIL Closures as a signal handler [tests/signal_closure_handler.phpt]
=====================================================================
TIME END 2013-04-28 12:11:07
=====================================================================
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped : 0
Exts tested : 44
---------------------------------------------------------------------
Number of tests : 15 15
Tests skipped : 0 ( 0.0%) --------
Tests warned : 0 ( 0.0%) ( 0.0%)
Tests failed : 15 (100.0%) (100.0%)
Expected fail : 0 ( 0.0%) ( 0.0%)
Tests passed : 0 ( 0.0%) ( 0.0%)
---------------------------------------------------------------------
Time taken : 4 seconds
=====================================================================
=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
Test pcntl wait functionality [tests/001.phpt]
pcntl: pcntl_sigprocmask(), pcntl_sigwaitinfo(), pcntl_sigtimedwait() [tests/002.phpt]
pcntl: SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK [tests/003.phpt]
Bug #47566 (return value of pcntl_wexitstatus()) [tests/bug47566.phpt]
pcntl_alarm() [tests/pcntl_alarm.phpt]
pcntl_exec() [tests/pcntl_exec.phpt]
pcntl_exec() 2 [tests/pcntl_exec_2.phpt]
pcntl_exec() 3 [tests/pcntl_exec_3.phpt]
Test function pcntl_fork() by calling it with its expected arguments [tests/pcntl_fork_basic.phpt]
Test function pcntl_fork() by testing the process isolation in the forking hierarchy father -> son -> grandson where father can not knows his grandson [tests/pcntl_fork_variation.phpt]
Test pcntl_get_last_error() [tests/pcntl_get_last_error.phpt]
pcntl_signal() [tests/pcntl_signal.phpt]
pcnt_signal_dispatch() [tests/pcntl_signal_dispatch.phpt]
pcntl_wait() [tests/pcntl_wait.phpt]
Closures as a signal handler [tests/signal_closure_handler.phpt]
=====================================================================
You may have found a problem in PHP.
This report can be automatically sent to the PHP QA team at
http://qa.php.net/reports and http://news.php.net/php.qa.reports
This gives us a better understanding of PHP''s behavior.
If you don''t want to send the report immediately you can choose
option "s" to save it. You can then email it to [email protected] later.
Do you want to send this report now? [Yns]: y
Please enter your email address.
(Your address will be mangled so that it will not go out on any
mailinglist in plain text): [email protected]
Posting to http://qa.php.net/buildtest-process.php
Thank you for helping to make PHP better.
oleg@oleg-Lenovo-G580:/php/php-5.4.6/ext/pcntl$ version
Al escribir el siguiente comando, parece que PHP ya está instalado, aunque el intérprete de PHP no reconoció la función antes de instalar esta extensión:
oleg@oleg-Lenovo-G580:/php/php-5.4.6/ext/pcntl$ php -m | grep pcntl
PHP Warning: Module ''pcntl'' already loaded in Unknown on line 0
pcntl
¿Cómo puedo configurar esta función para que funcione correctamente?
sudo gedit
sudo gedit /etc/php5/cli/php.ini
o y
sudo gedit /etc/php5/apache2/php.ini
encuentra:
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl
Comenta esto:
;disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl