linux — GAE gcloud dev_appserver.py PHP: не удалось прочитать данные сеанса: пользователь (путь: Memcache)

Я запускаю локальный эмулятор Google Cloud App Engine для моего PHP (runtime: php55) приложение. Это работает, за исключением сессий PHP. Я получаю следующее сообщение:

Warning: session_start(): Failed to read session data: user (path: Memcache)

Я запускаю приложение с помощью следующей команды

dev_appserver.py --php_executable_path=/usr/bin/php-cgi ./default

Поэтому я использую php-cgi. До этого я пытался запустить с обычным PHP, но затем я получил WSOD. В группе Google было предложено использовать php-cgi, что решило эту проблему для меня. Но теперь у меня все еще есть эта проблема, которая, кажется, связана с Memcache.

Это на Linux Mint (Ubuntu), и эта проблема не возникала на машине Windows, где у меня работает то же приложение в эмуляторе.

Когда я устанавливаю php-memcache, я больше не могу запустить приложение. При запуске вышеупомянутой команды с установленным php-memcache я получаю эту ошибку:

PHPEnvironmentError: The PHP runtime cannot be run with the
"Memcache" PECL extension installed

Как мне это решить?

0

Решение

Я не решил проблему с PHP cgi, но я обошел ее, написав собственный обработчик сессии. GAE по умолчанию сохраняет сеансы в Memcache с помощью обработчика сеансов пользователя. Если это по какой-то причине не работает, вы можете использовать мой следующий код, чтобы переключить ваш локальный GAE на обработчик сеансов ‘files’ и сохранить сеансы в папке:

<?php

if ($_SERVER['SERVER_NAME'] == 'localhost') {

class FileSessionHandler {

private $savePath;

function open($savePath, $sessionName) {
$this->savePath = $savePath;
if (!is_dir($this->savePath)) {
mkdir($this->savePath, 0777);
}

return true;
}

function close() {
return true;
}

function read($id) {
return (string) @file_get_contents("$this->savePath/sess_$id");
}

function write($id, $data) {
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}

function destroy($id) {
$file = "$this->savePath/sess_$id";
if (file_exists($file)) {
unlink($file);
}

return true;
}

function gc($maxlifetime) {
foreach (glob("$this->savePath/sess_*") as $file) {
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
unlink($file);
}
}

return true;
}

}

$handler = new FileSessionHandler();
session_set_save_handler(
array($handler, 'open'), array($handler, 'close'), array($handler, 'read'), array($handler, 'write'), array($handler, 'destroy'), array($handler, 'gc')
);
session_save_path('[PATH_TO_WRITABLE_DIRECTORY]');

register_shutdown_function('session_write_close');
}

session_start();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]