【问题标题】:Enable PCNTL in Ubuntu PHP - test fails在 Ubuntu PHP 中启用 PCNTL - 测试失败
【发布时间】:2015-06-02 06:49:00
【问题描述】:

我需要有关如何:在 Ubuntu PHP 中启用 PCNTL 的帮助。

$ 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

一切都很顺利,直到我尝试运行 phpize!然后我得到错误'-bash:phpize:找不到命令'??有什么想法吗?

更新运行:

$ sudo apt-get update

然后跑:

$ sudo apt-get install php5-dev

在尼克的帮助下,我设法完成了这个程序。但是'make test'失败了???

$ phpize
$ ./configure
$ make

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

$ make test - FAILED!

帮助:我输入了 'echo "extension=pcntl.so > /etc/php5/conf.d/pcntl.ini' 而不是 'echo "extension=pcntl.so" > /etc/php5/conf.d/ pcntl.ini' 我第一次运行这个。是不是很糟糕?

--------------------- 生成测试错误信息 ---------- ----------------------------------------

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]

有什么想法!?! 卡尔

【问题讨论】:

  • 你在sudo中运行吗?试试 /usr/bin/phpize
  • 为什么你在提示符下输入的内容是phpize 而bash 却返回phpsize
  • 好点@NickODell 是拼写错误。我用 phpize 重试以确保。冲动试过了! -bash: /usr/bin/phpize: 没有这样的文件或目录。我应该从我正在做的 /ext/pcntl/ 文件夹中运行这个命令吗?谢谢
  • 尝试运行sudo apt-get install php5-devThis link 可能会有所帮助。
  • 当我运行 Make Test 时!我收到列出的错误消息!请帮忙。

标签: php ubuntu pcntl


【解决方案1】:

这是我在 Ubuntu 12.04 中发现的:

  • 检查您的 PHP.ini 是否有被禁用的 pnctl 函数。

    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 报告该函数已加载,但如果不将 pcntl.ini 文件放入 /etc/php5/conf.d,它将无法实际工作。

遗憾的是,每次 /etc/cron.d 中的 PHP 会话清理 cron 启动时,这都会导致“模块已加载”错误,但是如果没有这两个部分,PCNTL 将无法运行,到目前为止我还没有找到了一个很好的解决方案来禁用“已加载”错误。它凌乱,丑陋,并且向我的根邮件发送垃圾邮件,当我找到解决方案时,我会发布它。到目前为止,我只在 12.04 遇到过这个问题。

更新

我破解了我的 /usr/lib/php5/maxlifetime 脚本文件以停止发送带有 pnctl 错误的垃圾邮件(PHP 警告:模块 'pcntl' 已加载到第 0 行的未知中)。这是我的编辑 - 我专门在 'E_DEPRECATED' 行中添加以使消息静音。

第 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)

【讨论】:

  • 这些对于 apache php.ini 是禁用的,因为这些功能不能通过 apache 工作。它们仅适用于 CLI。在 Ubuntu /etc/php5/apache/php.ini 上,这些应该保持禁用状态,但不在 /etc/php5/cli/php.ini 中
  • @EddieJaoude,你的评论应该是一个答案
  • 即使没有禁用这些功能 pcntl 也不会工作,除非您使用以下命令启用模块:sudo php5enmod pcntl
【解决方案2】:

有一些这样的步骤: (我的操作系统是 debian7.2 xfce x86)。

1:我这样安装pcntl

#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:重启nginx或apache2时,php会得到一个警告。

"PHP 警告:模块 ‘pcntl’ 已加载到 Unknown on line 0"

3:所以我

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

4:编辑“php.ini”文件。

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

制作

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

重启你的服务器,警告消失了。祝你好运。

【讨论】:

    【解决方案3】:

    在我的 ubuntu 12.10(以及更早版本)的开发机器上,pcntl 已启用/已启用。

    $ php -m | grep pcntl
    pcntl
    

    我想这就是问题所在:

    PHP 警告:模块 'pcntl' 已在第 0 行的未知中加载

    所以不要再安装了。

    【讨论】:

    • 为什么这些函数仍然无法在 PHP 中使用?有什么想法吗?
    • 我不知道,你想使用哪些功能,所以也许你有一个错字,或者你在看 wrog 扩展?或者你有一个过时的 PHP 版本(嗯,12.10 附带 5.4,所以这应该不是问题)?
    【解决方案4】:

    我需要重新启动服务器!现在它起作用了!呵呵..谢谢大家的意见。

    【讨论】:

    • 重启 apache 就足够了
    【解决方案5】:

    在 Ubuntu 15.04 中,pcntl 安装在 php CLI 中,但默认禁用。要启用,请编辑 /etc/php5/cli/php.ini 并注释掉该行:

    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,
    

    如果您希望在 apache2 中启用这些,请编辑文件 /etc/php5/apache2/php.ini 并进行相同的更改。

    建议只删除您需要使用的功能,以尽可能多地保留安全限制。

    【讨论】:

      猜你喜欢
      • 2014-04-25
      • 2017-03-17
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多