web-dev-qa-db-fra.com

pcntl ne fonctionne pas sur Ubuntu 'pour des raisons de sécurité'

J'ai installé pcntl sur mon PHP 5.4.6 fonctionnant sous Ubuntu 32 bits 12.10, en utilisant this article.

Cela ne s'est pas bien passé du tout, car après la compilation, lors de l'exécution de make test, j'ai eu les erreurs suivantes. Je reçois un avertissement chaque fois que j'essaie de créer un processus enfant qui dit:

Attention: pcntl_fork () a été désactivé pour des raisons de sécurité dans /var/www/mydev/dev/mailServiceTest.php à la ligne 8.

J'ai cherché une solution sur le Web, mais malheureusement, je n'ai trouvé aucune mention de ce problème ailleurs.

    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

Lorsque vous tapez la commande suivante, il semble que PHP soit en effet déjà installé, bien que l'interpréteur PHP n'ait pas reconnu la fonction avant l'installation de cette extension:

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

Comment configurer cette fonctionnalité pour qu'elle fonctionne correctement?

20
Oleg Belousov

Sudo gedit 

Sudo gedit /etc/php5/cli/php.ini

ou et

Sudo gedit /etc/php5/Apache2/php.ini trouver:

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

Commentez ceci:

;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
40
Oleg Belousov

Moi aussi j'ai eu ce problème. Ubuntu est livré avec quelques exemples de fichiers de configuration PHP dans /usr/share/php5: php.ini-production est le modèle pour le serveur Web Apache PHP config (/etc/php5/Apache2/php.ini) et désactive pcntl_fork et d'autres fonctions. php.ini-production.cli est le modèle pour PHP exécuté à partir de la ligne de commande (/etc/php5/cli/php.ini), y compris lorsque vous exécutez des tests, et il ne désactive aucune fonction. Mais en quelque sorte, mon /etc/php5/cli/php.ini était une copie de la configuration Apache qui désactive ces fonctions.

Je ne sais pas comment c'est arrivé. J'ai installé ma pile LAMP avec Ubuntu 12.04. Mon fichier /etc/php5/cli/php.ini daté d'octobre 2013, suggérant de l'installer sous Ubuntu 13.10; peut-être que cette version a copié le mauvais fichier. Les mises à niveau Ubuntu mettent à jour les exemples de fichiers dans /usr/share/php5 mais les laissent dans /etc/.

Pour le réparer, j'ai utilisé

$ Sudo cp -pi /usr/share/php5/php.ini-production.cli /etc/php5/cli/php.ini

copier le fichier de paramètres de ligne de commande par défaut. Évidemment, si vous avez modifié les paramètres PHP5 en ligne de commande, ils seront écrasés. utilisez vos compétences UNIX pour les différencier et les fusionner.

0
skierpage