Подтвердить что ты не робот

PHP, Memcached работает из командной строки, но не из Интернета

У меня есть PHP 5.3.3, установленный на Centos 6.4 с расширением 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"

Сервер memcache также работает из telnet. Однако, когда я запускаю index.php из Интернета, он терпит неудачу. Я получаю следующее (от просмотра источника веб-страницы):

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

За исключением повторной установки моей ОС и тестирования разных версий дерьма, может ли кто-нибудь объяснить, что может вызвать эту проблему?

4b9b3361

Ответ 1

Это проблема SELinux? Cli может получить доступ к Memcached, но daemon no. Попробуйте следующее:

  • getenforce, чтобы узнать, включен ли SELinux
  • setenforce 0, чтобы отключить его
  • reboot
  • Повторите попытку.

Если это хорошо, вы должны настроить Apache для доступа к Memcached.

Ответ 2

Убедитесь, что ваша служба memcache должна связывать все IP-адреса. Значение по умолчанию - 127.0.0.1. измените его на 0.0.0.0 для поддержки всех определенных Ips. В дополнение, не забудьте контролировать свои iptables или межсетевой экран.

Ответ 3

Когда я смотрю на примеры, я вижу, что он используется без модификатора "\" для пространства имен. Попробуйте без него, может быть?

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

<?php

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

Ответ 4

У меня была эта проблема в WAMP 2.4, пропустив простой тест Memcache script, работающий из командной строки, но не в браузере.

Ответ оказался потрясающе обыденным: у WAMP было два файла php.ini, и я редактировал неправильный.

например. Apache использовал этот: c:\wamp\bin\apache\Apache2.4.4\bin\php.ini У WAMP также был этот: c:\wamp\bin\php\php5.4.12\php.ini

Поместите расширение = php_memcache.dll в правильные файлы .ini, исправленные.

Моя подсказка что-то вроде этого была проблема была в том, что загруженный конфигурационный файл phpInfo() сообщал о разных значениях в двух случаях.

Ответ 5

У меня была точно такая же проблема, как описано OP. Оказалось, что проблема была вызвана списком серверов, расширение memcached поддерживает внутренне. Мой код был примерно таким:

$serversList = $memcached->getServerList();

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

Мой начальный вызов для тестирования script был выполнен с неправильным значением для $port. Вызов был сделан из web (apache), а не из cli. После того, как я исправил порт, и я снова запустил код, он пропускал "if" и использовал список существующих серверов, который был испорчен, и поэтому он снова не удался.

Увидев отказ от Интернета, который я тестировал с кли, он работал отлично. В списке серверов список серверов отличается от списка в Интернете. Фактически, список серверов был пустым при каждом запуске script, даже если мой script устанавливал его при каждом запуске. Тем не менее он сохранялся между вызовами в Интернете.

В любом случае, после очистки списка серверов в Интернете и установки правильного сервера, он также работал в Интернете.

Ответ 6

У меня похожая проблема на CentOS, и что я нашел. Я запускаю SELinux, которые не позволяют httpd подключаться к memcached. Вы должны установить ниже,

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