Я пытаюсь использовать семафоры на php но не могу получить sem_get () функция для работы. Вот мой PHP-код:
<?php
$key = 123567;
$maxAcquire = 1;
$permissions = 0666;
$autoRelease = 1;
//it gives the error on the line below
$semaphore = sem_get($key, $maxAcquire, $permissions, $autoRelease);
sem_acquire($semaphore);
echo "hello world!";
sem_release($semaphore);
?>
Когда я пытаюсь запустить его с:
php semaphore.php
Это печатает эту ошибку:
PHP Fatal error: Uncaught Error: Call to undefined function sem_get()
in /root/semaphore.php:8
Stack trace:
#0 {main}
thrown in /root/semaphore.php on line 8
Я работаю над Arch Linux с PHP 7.0.3 (cli). Я думаю, что решение очень простое, но я не смог найти способ это исправить. Если бы вы могли мне помочь, я был бы признателен. Благодарю.
Поддержка семафоров не является стандартной функцией php.
Он должен быть активирован через компилятор --enable-sysvsem
опция при создании бинарника php.
Смотрите объяснение в руководстве: http://php.net/manual/en/sem.installation.php
Расширение семафора по умолчанию недоступно, как указано в документы:
Поддержка этих функций не включена по умолчанию. Чтобы включить поддержку семафора System V, скомпилируйте PHP с параметром
--enable-sysvsem
, Чтобы включить поддержку разделяемой памяти System V, скомпилируйте PHP с параметром--enable-sysvshm
, Чтобы включить поддержку сообщений System V, скомпилируйте PHP с параметром--enable-sysvmsg
,
Если вы находитесь на размещенном сервере, то этот хостинг, вероятно, не предлагает этого.
Спасибо вам всем! Я раскомментировал строку:
extension=sysvsem.so
на php.ini и это сработало!
Посмотрите на документы. Такое ощущение, что у вас не установлен php с семафорами должным образом. Посмотрите на Инструкция по установке.