2016-02-24 119 views
1

我想在我的PHP代碼中使用信號量。我已更新我的服務器的PHP版本,它工作正常通過命令行。當我試着通過瀏覽器訪問它它給我的錯誤:不能在我的主機中使用PHP sem_get()函數

Fatal error: Call to undefined function sem_get() in .../semaphore.php on line 8 

下面是代碼:

<?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); 
?> 

即使它通過命令行工作,爲何它沒有工作在瀏覽器上?是關於apache服務器?你對互斥量有什麼建議對PHP以外的其他信號量?我希望數據庫上的文本一次由一個用戶編輯。謝謝。

+0

對於相同的PHP環境(命令行,Apache模塊,CGI ...),不需要具有相同的配置。您需要安裝用於命令行的擴展。 –

回答

0

installation note提到:

此功能

支持不是默認啓用的。要啓用System V信號量支持,請使用選項--enable-sysvsem編譯PHP。要啓用System V共享內存支持,請使用選項--enable-sysvshm編譯PHP。要啓用System V消息,請使用選項--enable-sysvmsg支持編譯PHP。

您已使用--enable-sysvsem編譯PHP以啓用該函數。

最後,您可以使用phpinfo()函數驗證信號量支持的狀態。


UPDATE此外,OP發現Apache是​​使用不同的版本比在控制檯中使用的PHP版本。因此,瀏覽器和控制檯的輸出是不同的。

+0

我用'--enable-sysvsem'編譯了我的自定義PHP,當我通過命令行運行代碼時:'php semaphore.php'。當我輸入'php -v'到命令行時,我看到php版本也被更新了。但它不適用於瀏覽器。 – user3262476

+0

接下來要做的是確認Apache使用的PHP與終端使用的PHP是相同的版本。另外,還建議您在瀏覽器中檢查'phpinfo()'。 – Raptor

+1

我的** apache服務器**上的PHP版本是不同的!你知道我怎麼改變它?順便感謝您的關注。 – user3262476

相關問題