2013-04-28 19 views
18

Ho installato pcntl sul mio PHP 5.4.6 su Ubuntu 32-bit 12.10, usando l'articolo this.pcntl non funziona su Ubuntu 'per motivi di sicurezza'

Non ha funzionato affatto perché dopo la compilazione, quando si esegue make test ho ricevuto i seguenti errori. Sto ottenendo un messaggio di avviso ogni volta che sto cercando di fork di un processo figlio che dice:

Attenzione: pcntl_fork() è stato disabilitato per motivi di sicurezza in /var/www/mydev/dev/mailServiceTest.php on line 8

Ho cercato in tutto il Web una soluzione, ma sfortunatamente non ho trovato alcun accenno a questo problema da nessun'altra parte.

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. 
[email protected]:/php/php-5.4.6/ext/pcntl$ version 

Quando si digita il seguente comando, sembra che PHP è infatti già installato, anche se l'interprete PHP non ha riconosciuto la funzione prima ho installato questa estensione a tutti:

[email protected]:/php/php-5.4.6/ext/pcntl$ php -m | grep pcntl 
PHP Warning: Module 'pcntl' already loaded in Unknown on line 0 
pcntl 

Come posso configurare questa funzionalità per funzionare correttamente?

+1

Bene, rimuovilo dalla configurazione 'disable_functions' .... (vedi output di' php -d disable_functions = pcntl_fork -r 'pcntl_fork();' 'o' php -d disable_functions = substr -r 'substr (1); "per questo). Si noti che è una cattiva idea imboccare un server web. – Wrikken

+0

grazie, ma sto usando questo script su CLI sapi, quindi dovrebbe andare bene –

risposta

37

sudo gedit

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

o \ e

sudo gedit /etc/php5/apache2/php.ini ritrovamento:

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 

Commento questo fuori:

;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 
+7

Hm, perché il tuo script _cli_ sta caricando/etc/php5/_apache2_ /php.ini? – Wrikken

+1

Se * si * ha * l'uso della GUI e ha bisogno di un accesso di root, utilizzare invece 'gksudo': http://askubuntu.com/a/11766/63492 –

+0

Ciao Aditya, la risposta specificata parla di modifica dei file nella tua home directory con come superutente, non è questo il caso, il file php.ini è già di proprietà dell'utente del server web (www-data per apache) o, nel caso peggiore, di root stesso, ma mai dall'utente. –

0

Anch'io ho avuto questo prob lem. Ubuntu viene fornito con alcuni file di configurazione PHP di esempio in /usr/share/php5: php.ini-production è il modello per la configurazione PHP del server Web Apache (/etc/php5/apache2/php.ini) e disattiva pcntl_fork e altre funzioni. php.ini-production.cli è il modello per PHP eseguito dalla riga di comando (/etc/php5/cli/php.ini) incluso quando si eseguono i test e non si disabilita alcuna funzione. Ma in qualche modo il mio /etc/php5/cli/php.ini era una copia della configurazione di Apache che disabilita queste funzioni.

Non sono sicuro di come sia successo. Ho installato il mio stack LAMP con Ubuntu 12.04. Il mio file /etc/php5/cli/php.ini datato a ottobre 2013, suggerendo che Ubuntu 13.10 lo ha configurato; forse quella versione copiò il file sbagliato. Gli aggiornamenti di Ubuntu aggiornano i file di esempio in /usr/share/php5 ma lasciano i file solo in /etc/.

per risolvere il problema ho usato

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

per copiare il file delle impostazioni della riga di comando predefinito. Ovviamente se hai apportato modifiche alle impostazioni PHP5 della riga di comando, questo verrà sovrascritto; usa le tue abilità UNIX per diff e unirle.