Enable PCNTL in Ubuntu PHP - test fails
Asked Answered
T

5

12

I need help on How to: Enable PCNTL in Ubuntu PHP.

$ mkdir /tmp/phpsource
$ cd /tmp/phpsource


$ wget http://museum.php.net/php5/php-5.3.2.tar.gz
$ tar xvf php-5.3.2.tar.gz
$ cd php-5.3.2/ext/pcntl


$ phpize   -bash: phpize: command not found

Everything went fine until I tried to run phpize! And then I get the error '-bash: phpize: command not found' ?? Any ideas?

UPDATE ran:

$ sudo apt-get update

and then ran:

$ sudo apt-get install php5-dev

With the help of Nick I managed to finish the procedure. But 'make test' fails???

$ phpize
$ ./configure
$ make

$ cp modules/pcntl.so /usr/lib/php5/20090626/
$ echo "extension=pcntl.so" > /etc/php5/conf.d/pcntl.ini

$ make test - FAILED!

HELP: I typed 'echo "extension=pcntl.so > /etc/php5/conf.d/pcntl.ini' instead of 'echo "extension=pcntl.so" > /etc/php5/conf.d/pcntl.ini' the first time I ran this. Is that BAD?

--------------------------------- Make TEst Error Messages --------------------------------------

PHP Deprecated: Comments starting with '#' are deprecated in /tmp/phpsource/php-5.3.2/ext/pcntl/tmp-php.ini on line 1850 in Unknown on line 0
PHP Deprecated: Comments starting with '#' are deprecated in /tmp/phpsource/php-5.3.2/ext/pcntl/tmp-php.ini on line 1852 in Unknown on line 0
PHP Deprecated: Comments starting with '#' are deprecated in /tmp/phpsource/php-5.3.2/ext/pcntl/tmp-php.ini on line 1850 in Unknown on line 0
PHP Deprecated: Comments starting with '#' are deprecated in /tmp/phpsource/php-5.3.2/ext/pcntl/tmp-php.ini on line 1852 in Unknown on line 0
PHP Warning: Module 'pcntl' already loaded in Unknown on line 0

Warning: Module 'pcntl' already loaded in Unknown on line 0
PHP Deprecated: Comments starting with '#' are deprecated in /tmp/phpsource/php-5.3.2/ext/pcntl/tmp-php.ini on line 1850 in Unknown on line 0
PHP Deprecated: Comments starting with '#' are deprecated in /tmp/phpsource/php-5.3.2/ext/pcntl/tmp-php.ini on line 1852 in Unknown on line 0
PHP Warning: Module 'pcntl' already loaded in Unknown on line 0

Warning: Module 'pcntl' already loaded in Unknown on line 0

=====================================================================
PHP : /usr/bin/php
PHP_SAPI : cli
PHP_VERSION : 5.3.2-1ubuntu4.18
ZEND_VERSION: 2.3.0
PHP_OS : Linux - Linux lvps217-8-253-63.vps.webfusion.co.uk 2.6.32-042stab068.8 #1 SMP Fri Dec 7 17:06:14 MSK 2012 x86_64
INI actual : /tmp/phpsource/php-5.3.2/ext/pcntl/tmp-php.ini
More .INIs :
CWD : /tmp/phpsource/php-5.3.2/ext/pcntl
Extra dirs :
VALGRIND : Not used
=====================================================================
TIME START 2013-01-02 23:05:56
=====================================================================
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 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-01-02 23:05:59

=====================================================================
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped : 0
Exts tested : 44
---------------------------------------------------------------------

Number of tests : 14 14
Tests skipped : 0 ( 0.0%) --------
Tests warned : 0 ( 0.0%) ( 0.0%)
Tests failed : 14 (100.0%) (100.0%)
Expected fail : 0 ( 0.0%) ( 0.0%)
Tests passed : 0 ( 0.0%) ( 0.0%)
---------------------------------------------------------------------
Time taken : 3 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]
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]

ANY ideas!?! Carl

Trillium answered 31/12, 2012 at 0:20 Comment(5)
Are you running in sudo? Try /usr/bin/phpizeOrlene
Why is it that the thing you typed at the prompt says phpize but bash comes back with phpsize?Brewis
Good point @NickODell Was a spelling mistake. I retried it with phpize to make sure. Impulss Tried that! -bash: /usr/bin/phpize: No such file or directory. Should I run this command from the /ext/pcntl/ folder thats what I am doing? ThanksTrillium
Try running sudo apt-get install php5-dev. This link might be helpful.Brewis
When I run Make Test! I get the error messages listed! Please HELP.Trillium
P
11

Here's what I've found in Ubuntu 12.04:

  • Check your PHP.ini for the pnctl functions being disabled.

    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_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority
    
  • phpinfo reports the function is already loaded but it will not actually work without putting the pcntl.ini file into /etc/php5/conf.d.

Sadly, this causes 'module already loaded' errors every time PHP session cleanup cron in /etc/cron.d kicks off, but PCNTL won't function without both of these pieces in place, and so far I haven't found a good solution to disable the 'already loaded' error. Its messy, and ugly, and spams my root mail, and when I can find a solution, I will post it. I've only run into this problem in 12.04 so far.

UPDATE

I hacked my /usr/lib/php5/maxlifetime script file to stop spamming with pnctl errors (PHP Warning: Module 'pcntl' already loaded in Unknown on line 0). Here are my edits - I specifically added in the 'E_DEPRECATED' line to quiet the messages.

Line 8:

    cur=$(php5 -c /etc/php5/${sapi}/php.ini -d "error_reporting='E_ALL & ~E_DEPRECATED'" -r 'print ini_get("session.gc_maxlifetime");' 2> /dev/null)
Pannonia answered 6/2, 2013 at 20:9 Comment(3)
These are disabled for apache php.ini as these functions do not work through apache. They only work on the CLI. On Ubuntu /etc/php5/apache/php.ini, these should stay disabled, but not in /etc/php5/cli/php.iniZebadiah
@EddieJaoude, your comment should be an answerKlink
Even though those functions are not disabled pcntl won't work unless you enable the module with: sudo php5enmod pcntlJanae
G
7

There is some steps like this: (my OS is debian7.2 xfce x86).

1: i install pcntl like this

#mkdir php
#cd php 
#apt-get source php5 
#cd php5-5.4.4/ext/pcntl
#phpize
#./configure
#make
#echo "extension=pcntl.so" > /etc/php5/mods-available/pcntl.ini
#ln -s /etc/php5/mods-available/pcntl.ini /etc/php5/conf.d/pcntl.ini

2: when is restart nginx or apache2, the php get one warning.

"PHP Warning: Module ‘pcntl’ already loaded in Unknown on line 0"

3: so i

"rm -rf /etc/php5/mods-available/pcntl.ini and /etc/php5/conf.d/pcntl.ini"

4: edit the "php.ini" file .

a.apache2, it's in "/etc/php5/apache2/php.ini"
b.cgi like nginx,it's in "/etc/php5/cgi/php.ini"

make the

"disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited..."
comments, add  " ; "  in front of "disable_functions".

restart your server and the warning gone.good luck.

Globigerina answered 18/10, 2013 at 4:46 Comment(0)
M
4

On my dev machine with ubuntu 12.10 (and earlier versions too) pcntl is/was already enabled.

$ php -m | grep pcntl
pcntl

I guess thats the problem:

PHP Warning: Module 'pcntl' already loaded in Unknown on line 0

So just don't install it again.

Malliemallin answered 2/1, 2013 at 23:21 Comment(2)
how come the functions are still unavilable to use in PHP then? Any ideas?Trillium
I don't know, which functions you want to use, so maybe you have a typo, or you are looking at the wrog extension? Or you have an outdated PHP-version (well, 12.10 comes with 5.4, so this shouldn't be the problem)?Malliemallin
T
1

I NEEDED to restart the server! And now it works! Doh.. Thanks for everybodys input.

Trillium answered 3/1, 2013 at 0:3 Comment(1)
An apache restart should have been enoughZebadiah
E
0

In Ubuntu 15.04, the pcntl is installed in the php CLI, but disabled by default. To enable, edit /etc/php5/cli/php.ini and comment out the line:

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_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

If you want these enabled in apache2, then edit the file /etc/php5/apache2/php.ini and make the same change.

It may be advisable to only remove the functions you need to use, in order to preserve as much of the security restrictions as possible.

Exchange answered 1/6, 2015 at 22:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.