簡體   English   中英

PHP,Memcached可以從命令行運行,但不能從Web運行

[英]PHP, Memcached works from command line but not from the web

我在Centos 6.4上安裝了PHP 5.3.3,擴展名為memcached.so ,httpd運行版本為2.2.15-26。 這是我的index.php

$mc = new \Memcached();
$mc->addServer('127.0.0.1', 11211);
$mc->set("test", "blah");
var_dump($mc->getResultCode());
var_dump($mc->getResultMessage());
var_dump($mc->get("test"));
die;

當我從命令行運行它時, 它工作 我得到以下內容:

10:22:33 $ php index.php
int(0)
string(7) "SUCCESS"
string(4) "blah"

內存緩存服務器也可以在telnet上運行。 但是,當我從Web運行index.php時, 它會失敗。 我得到以下內容(來自查看網頁來源):

int(47)
string(51) "SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY"
bool(false)

如果沒有重新安裝我的操作系統並嘗試不同版本的垃圾,任何人都可以解釋可能導致此問題的原因嗎?

這是SELinux的問題嗎? Cli可以訪問Memcached但守護進程沒有。 試試這個 :

  • getenforce知道你是否啟用了SELinux
  • setenforce 0禁用它
  • reboot
  • 重試您的測試

如果是好的,您必須配置Apache以訪問Memcached。

我在CentOS上有類似的問題,我發現它我正在運行SELinux,阻止httpd連接到memcached。 你需要在下面設置,

# setsebool -P httpd_can_network_memcache 1
# getsebool httpd_can_network_memcache
httpd_can_network_memcache --> on

請確保您的memcache服務應綁定所有IP。 默認值為127.0.0.1。 將其更改為0.0.0.0以支持所有已定義的Ips。 另外,不要忘記控制你的iptables或防火牆。

我在WAMP 2.4中遇到了這個問題,在命令行中運行了一個簡單的Memcache測試腳本,但是在瀏覽器中沒有。

答案結果非常平凡:WAMP有兩個php.ini文件,而我正在編輯錯誤的文件。

例如,Apache使用了這個:c:\\ wamp \\ bin \\ apache \\ Apache2.4.4 \\ bin \\ php.ini WAMP也有這個:c:\\ wamp \\ bin \\ php \\ php5.4.12 \\ php.ini

將extension = php_memcache.dll放在正確的.ini文件中修復了一些問題。

我的線索是這樣的問題是phpInfo()加載的配置文件在兩種情況下報告了不同的值。

我有與OP所描述的完全相同的問題。 原來,問題是由memcached擴展內部維護的服務器列表引起的。 我的代碼是這樣的:

$serversList = $memcached->getServerList();

if (empty($serversList)) {
     $memcached->addServer($host, $port);
}

我對測試腳本的初始調用是使用$ port的錯誤值完成的。 呼叫是從web(apache)而不是cli完成的。 在我更正端口並再次運行代碼之后,它正在跳過'if'並使用現有的服務器列表,這是有缺陷的,所以它再次失敗。

從網上看到我用cli測試過的失敗,它運行得很好。 在cli中,服務器列表與Web中的列表不同。 事實上,即使我的腳本在每次運行時設置它,服務器列表在每次啟動腳本時都是空的。 然而,它仍然存在於網絡上的呼叫之間。

無論如何,在清除Web上的服務器列表並設置正確的服務器之后,它也可以從Web上按預期工作。

當我查看示例時,我看到它在沒有命名空間“\\”修飾符的情況下使用。 嘗試沒有它可能嗎?

http://www.php.net/manual/en/memcache.examples-overview.php

<?php

$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM