PHP sem_get()不起作用

时间:2016-02-20 12:39:12

标签: php semaphore archlinux

我正在尝试在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 。我想解决方案很简单,但我找不到解决方法。如果你能帮助我,我会很感激。感谢。

4 个答案:

答案 0 :(得分:2)

支持信号量不是php的标准功能。

在创建php二进制文件时,必须通过编译器--enable-sysvsem选项激活它。

请参阅手册中的说明:http://php.net/manual/en/sem.installation.php

答案 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 上,它有效!