LinuxForum.Fans
Тема

Как прикрутить модуль CLI (pcntl) на php

Автор: Drugpunker 31 сообщений 4110 просмотров
#379209

Всем здравствуйте.

Создал тему, надеясь хотя бы здесь найти ответ на вопрос:
"Как заставить работать функции типа pcntl_fork" (на php и Apache, соответственно)

ОС у меня Linux Mint 16 Petra


Установка PHP выполнялась методом
[console]$ apt-get install php5-dev[/console]
Далее делал следующее:

Установил библиотеку CLI
[console]$ apt-get install php5-cli[/console]
Скачал архив с http://www.php.net/releases/, соответствующий моей версии php
Разархивировал в папку /php
[console]$ cd php/ext/pcntl
$ phpize
$ ./configure
$ make
$ echo "extension=pcntl.so" > /etc/php5/mods-available/pcntl.ini[/console]
Во всех php.ini закомментировал ;disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited..."

Но ничего не выходит:

Fatal error: Call to undefined function pcntl_fork() in...

На Linux пришлось перейти именно из-за отсутствия этой функции для Windows.
Делал как описано в мануале.

Прошу расскажите, как собрать PHP с pcntl или ссылку дайте?
На форумах и вообще в webe всё одно и тоже и не работает.

И как вообще правильно LAMP собирать? Может есть секреты какие, мануалы (развёрнутые)?
Linux под разработку хочу оставить.
Задавал подобный вопрос на тематических форумах по PHP - толка ноль...

#379215

Drugpunker,

text
# make install

видимо забыли.

"Drugpunker" написал:
И как вообще правильно LAMP собирать?

А зачем его собирать?

#379217

Делал по многочисленным инструкциям.
Везде было [*]make
.....?

#379218

Покажите вывод

text
php -m | grep pcntl

Если выведет pcntl, значит оно у вас уже есть.

"Drugpunker" написал:
Fatal error: Call to undefined function pcntl_fork() in...

apache перезагружали после исправления конфигов?
И какой из php.ini исправляли? Они разные для apache и cli

#379219

$ php -m | grep pcntl
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/pcntl.so' - /usr/lib/php5/20121212/pcntl.so: cannot open shared object file: No such file or directory in Unknown on line 0
pcntl

Все php.ini уже исправил

#379221

phpinfo()

Additional .ini files parsed
/etc/php5/apache2/conf.d/05-opcache.ini, /etc/php5/apache2/conf.d/10-pdo.ini, /etc/php5/apache2/conf.d/20-gd.ini, /etc/php5/apache2/conf.d/20-json.ini, /etc/php5/apache2/conf.d/20-mysql.ini, /etc/php5/apache2/conf.d/20-mysqli.ini, /etc/php5/apache2/conf.d/20-pdo_mysql.ini, /etc/php5/apache2/conf.d/pcntl.ini

#379222

Таки не хватает make install
Это не совсем правильное решение, как и использование pcntl_* в рамках apache в принципе. Я бы подумал, точно ли оно вам надо именно в таком виде.

Цитата из http://www.php.net/manual/en/intro.pcntl.php

Process Control should not be enabled within a web server environment and unexpected results may happen if any Process Control functions are used within a web server environment.
#379225

Нужен демон на php.

Других вариантов не вижу.
Или смотрю не туда?

#379229

А вы саму библиотеку скопировали в директорию разшырений php?

#379230

А где она находится?

#379231

Если в Lib, то нет

#379233
"Drugpunker" написал:
Нужен демон на php.

Других вариантов не вижу.
Или смотрю не туда?

Демон по идее должен запускаться через php-cli (там функции pcntl_* у вас должны работать), а не mod_php, тогда все норм. Если уж нужно запускать именно через web, то как вариант:

text
exec('php /path/to/daemon.php');

PS Программист из меня так себе, так что стоит погуглить этот вопрос.

#379234
"neol" написал:
Демон по идее должен запускаться через php-cli

Каким образом это происходит?Как запускается?

#379236
"Drugpunker" написал:
cd php/ext/pcntl

ТС покажыте но листинг этой директории

#379237
"Drugpunker" написал:
Каким образом это происходит?Как запускается?

Введите в консоли
php /path/to/script.php
это будет запуск из cli (command line interface).
Совсем правильно будет сделать запуск через используемую систему инициализации (initd, upstart, systemd, etc)

#379239
"neol" написал:
Таки не хватает make install
Показать
[console]~/php/ext/pcntl $ make test && make install

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.5.3-1ubuntu2.3
ZEND_VERSION: 2.5.0
PHP_OS : Linux - Linux Drugpunker-PC 3.11.0-12-generic #19-Ubuntu SMP Wed Oct 9 16:20:46 UTC 2013 x86_64
INI actual : /home/drugpunker/php/ext/pcntl/tmp-php.ini
More .INIs :
CWD : /home/drugpunker/php/ext/pcntl
Extra dirs :
VALGRIND : Not used
=====================================================================
TIME START 2014-05-07 11:29:30
=====================================================================
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 2014-05-07 11:29:35

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

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 : 5 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 qa-reports@lists.php.net 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): drugpunker@gmail.com

Posting to http://qa.php.net/buildtest-process.php

Thank you for helping to make PHP better.
Installing shared extensions: /usr/lib/php5/20121212/
cp: cannot create regular file '/usr/lib/php5/20121212/#INST@12102#': Permission denied
make: *** [install-modules] Ошибка 1
[/console]
#379240

И приветиде ещё листинг вот этой директории
[console]ls -l usr/lib/php5/20121212[/console]

#379241

make install нужно запускать из под рута. У вас команда копирования готовой библиотеки не отработала

"Drugpunker" написал:
cp: cannot create regular file '/usr/lib/php5/20121212/#INST@12102#': Permission denied

Скопируйте ручками из под рута.

#379242
"kisil" написал:
И приветиде ещё листинг вот этой директории
Консоль
ls -l usr/lib/php5/20121212

Нет такой директории...

#379244

А такая есть. Ну не всёже копипастите
[console]ls -l /usr/lib/php5/20121212[/console]

Войдите или зарегистрируйтесь, чтобы ответить.