семафор — PHP sem_get () не работает

Я пытаюсь использовать семафоры на 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). Я думаю, что решение очень простое, но я не смог найти способ это исправить. Если бы вы могли мне помочь, я был бы признателен. Благодарю.

1

Решение

Поддержка семафоров не является стандартной функцией php.

Он должен быть активирован через компилятор --enable-sysvsem опция при создании бинарника php.

Смотрите объяснение в руководстве: http://php.net/manual/en/sem.installation.php

2

Другие решения

Расширение семафора по умолчанию недоступно, как указано в документы:

Поддержка этих функций не включена по умолчанию. Чтобы включить поддержку семафора System V, скомпилируйте PHP с параметром --enable-sysvsem , Чтобы включить поддержку разделяемой памяти System V, скомпилируйте PHP с параметром --enable-sysvshm , Чтобы включить поддержку сообщений System V, скомпилируйте PHP с параметром --enable-sysvmsg ,

Если вы находитесь на размещенном сервере, то этот хостинг, вероятно, не предлагает этого.

0

Спасибо вам всем! Я раскомментировал строку:

extension=sysvsem.so

на php.ini и это сработало!

0

Посмотрите на документы. Такое ощущение, что у вас не установлен php с семафорами должным образом. Посмотрите на Инструкция по установке.

0