Почему так произошло
( ! ) Warning: session_start(): Failed to read session data: user (path: /var/lib/php/sessions)
in /var/www/php.xxx/session/handlers.php on line 73
Call Stack
# Time Memory Function Location
1 0.0003 395424 {main}( ) .../handlers.php:0
2 0.0003 395832 session_start ( ) .../handlers.php:73
Если убрать session_start();
то ошибка пропадает
<?php ## Переопределение обработчиков сессии.
// Возвращает полное имя файла временного хранилища сессии.
// В случае, если нужно изменить тот каталог, в котором должны
// храниться сессии, достаточно поменять только эту функцию
function ses_fname($key)
{
return dirname(__FILE__)."/sessiondata/".session_name()."/$key";
}
// Заглушки - эти функции просто ничего не делают
function ses_open($save_path, $ses_name)
{
return true;
}
function ses_close()
{
return true;
}
// Чтение данных из временного хранилища
function ses_read($key)
{
// Получаем имя файла и открываем файл.
$fname = ses_fname($key);
return @file_get_contents($fname);
}
// Запись данных сессии во временное хранилище
function ses_write($key, $val)
{
$fname = ses_fname($key);
// Сначала создаем все каталоги (в случае, если они уже есть,
// игнорируем сообщения об ошибке)
@mkdir(dirname(dirname($fname)), 0777);
@mkdir(dirname($fname), 0777);
// Создаем файл и записываем в него данные сессии.
@file_put_contents($fname, $val);
return true;
}
// Вызывается при уничтожении сессии
function ses_destroy($key)
{
return @unlink(ses_fname($key));
}
// Сборка мусора - ищем все старые файлы и удаляем их
function ses_gc($maxlifetime)
{
$dir = ses_fname(".");
// Получаем доступ к каталогу текущей группы сессии.
foreach (glob("$dir/*") as $fname) {
// Файл слишком старый?
if (time() - filemtime($fname) >= $maxlifetime) {
@unlink($fname);
continue;
}
}
// Если директория непуста, она не удалится - будет предупреждение.
// Мы его подавляем. Если же пуста - удалится, что нам и нужно.
@rmdir($dir);
return true;
}
// Регистрируем наши новые обработчики
session_set_save_handler(
"ses_open", "ses_close",
"ses_read", "ses_write",
"ses_destroy", "ses_gc"
);
// Для примера подключаемся к группе сессий test.
session_name("test1");
session_start();
// Увеличиваем счетчик в сессии.
$_SESSION['count'] = @$_SESSION['count'] + 1;
?>
<h2>Счетчик</h2>
В текущей сессии работы с браузером Вы открыли эту страницу
<?=$_SESSION['count']?> раз(а).<br>
Закройте браузер, чтобы обнулить счетчик.<br>
<a href="<?=$_SERVER['SCRIPT_NAME']?>" target="_blank">Открыть дочернее окно браузера</a>.
Это пример из книги PHP7. В подлиннике. Нашел ошибку. Проблема в функции ses_read. При первом запуске данного файла не существует. В этом случае функция возвращает 0 и сессия закрывается. Нам же нужно, чтобы функция ses_read возвращала пустую строку, если нет данных. Переписал функцию так:
function ses_read($key){
// Получаем имя файла и открываем файл
$fname = ses_fname($key);
$str = @file_get_contents($fname);
return $str ? $str:"";
}
И все заработало.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Может кто знает как подключить Leaflet карту с возможностью рисовать полигоны на карте и потом отправлять координаты на почту (второстепенно)У...
В общем пишет что нет класса CSSphp хотя он есть и подключен вот так
Может кто подскажет как отправить две формы одной кнопкой SubmitНадо, чтобы после заполнения формы пользователем, они отправлялись на почту...