我正在尝试在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
我正在使用 PHP 7.0.3(cli)开发 Arch Linux 。我想解决方案很简单,但我找不到解决方法。如果你能帮助我,我会很感激。感谢。
答案 0 :(得分:2)
支持信号量不是php的标准功能。
在创建php二进制文件时,必须通过编译器--enable-sysvsem
选项激活它。
答案 1 :(得分:0)
默认情况下,信号量扩展名不可用,如the docs中所述:
默认情况下不启用对此功能的支持。要启用System V信号量支持,请使用选项
--enable-sysvsem
编译PHP。要启用System V共享内存支持,请使用选项--enable-sysvshm
编译PHP。要启用System V消息,请使用选项--enable-sysvmsg
编译PHP。
如果您在托管服务器上,那么该托管服务可能不会提供此服务。
答案 2 :(得分:0)
查看docs。感觉就像你没有正确安装信号量的PHP。看看installation instructions。
答案 3 :(得分:0)
谢谢大家!我取消了这条线:
extension=sysvsem.so
在 php.ini 上,它有效!