Чтение file_get_contents файла сессии

proft

Новичок
Чтение file_get_contents файла сессии

Захотелось дописать небольшую мелочь к сайту - Сейчас на сайте, что бы выводилось количество гостей и ники админов. Данные о пользователях храню в сессии. Есть два файла с сессиями :

Содержание файла_1 (админ) :
online|i:1;name|s:5:"proft";email|s:11:"[email protected]";passw|s:32:"cb409b39fff98e9c6c07c6e9498986e1";

Содержание файла_2 (гость) :
online|i:1;

Фрагмент кода:

....
$timeOnline = 5;
$pasthSession = session_save_path();

if (time() - filemtime(session_save_path().'/'.$file) < $timeOnline * 60)
{
$filePath = $pasthSession.'/'.$file;
$str = file_get_contents($filePath);
print "$filePath - $str<br/>";
....
}

Значение $str для каждого файла сессии :

session/sess_980e10a0db0e0a4146847d0b71ce91d9 -
session/sess_d1708e903b2fdfe100889f20cf4a8910 - online|i:1;

Функция file_get_contents возвращает FALSE для файла_1. Функция is_readable возвращает TRUE.
Почему так?
 

Popoff

popoff.donetsk.ua
Не нужно читать фйлы сессий. Придумай другой способ.
 

proft

Новичок
Хорошо, уже переделал на MySQL.

Меня терзают смутные сомнения :) ... почему же file_get_contents считывает содержание файлов с сессией не всегда? Загадка?
 

RushHourRider

Новичок
Автор оригинала: proft
Хорошо, уже переделал на MySQL.

Меня терзают смутные сомнения :) ... почему же file_get_contents возвращает содержание не всех файлов в сессии? Загадка?
Чудес не бывает. Либо файл пустой либо $file формируется некорректно.
 

proft

Новичок
tf смешно

RushHourRider файл точно не пустой, писал в своем первом посте, в файле записана упакованная сессии, в обычный день для file_get_contents считать текстовый файл - раз плюнуть, но не в этот раз
 

kruglov

Новичок
Потому что файл уже открыт. Я так понимаю, что не читается файл того юзера, что смотрит статистику.
 

hermit_refined

Отшельник
Потому что файл уже открыт
Не может быть такого: ни теоретически - ведь файл открывается только на чтение, ни практически - иначе два скрипта в рамках одной сессии не смогли бы одновременно работать.

P.S. Из вредности проверил:
PHP:
<?php

$dir = dirname(__FILE__).'/tmp';
session_save_path($dir);
session_start();

echo session_id(), "\n";
$_SESSION['test'] = 777;

foreach(glob($dir.'/*') as $file)
    echo basename($file), ":\t", file_get_contents($file), "\n";

?>
Первый вызов (т.к. сессия ещё не записана):
50ffcaa8e5f7537180311f356de0b58f
sess_50ffcaa8e5f7537180311f356de0b58f:

Второй:
50ffcaa8e5f7537180311f356de0b58f
sess_50ffcaa8e5f7537180311f356de0b58f: test|i:777;

Автор темы просто плохо понимал, что делает, в данном случае - и слава богу.
 

proft

Новичок
Автор оригинала: hermit_refined
Не может быть такого: ни теоретически - ведь файл открывается только на чтение, ни практически - иначе два скрипта в рамках одной сессии не смогли бы одновременно работать.

P.S. Из вредности проверил:
PHP:
<?php

$dir = dirname(__FILE__).'/tmp';
session_save_path($dir);
session_start();

echo session_id(), "\n";
$_SESSION['test'] = 777;

foreach(glob($dir.'/*') as $file)
    echo basename($file), ":\t", file_get_contents($file), "\n";

?>
Первый вызов (т.к. сессия ещё не записана):
50ffcaa8e5f7537180311f356de0b58f
sess_50ffcaa8e5f7537180311f356de0b58f:

Второй:
50ffcaa8e5f7537180311f356de0b58f
sess_50ffcaa8e5f7537180311f356de0b58f: test|i:777;
у меня этот скрипт выдает :

Первый вызов:
04ab7505dcfbfb64f79d45674f0d6b17 sess_04ab7505dcfbfb64f79d45674f0d6b17:

Второй:
04ab7505dcfbfb64f79d45674f0d6b17 sess_04ab7505dcfbfb64f79d45674f0d6b17:

т.е. одно и тоже, хотя в файле сессии записано test|i:777;
может эта разница в выводе из-за разных версий php ?
у себя проверяю на Apache/1.3.33 (Win32) PHP/4.4.0, для быстрой развертки использовал Денвер

Автор темы просто плохо понимал, что делает, в данном случае - и слава богу.
не согласен, дальше распространяться на эту тему не буду :p
 

Popoff

popoff.donetsk.ua
Не может быть такого: ни теоретически - ведь файл открывается только на чтение, ни практически - иначе два скрипта в рамках одной сессии не смогли бы одновременно работать.
А не могут два скрипта параллельно работать в рамках одной сессии ;)
Об этом в документации написано, вот на этой странице:
[m]session_write_close[/m]

-~{}~ 08.10.06 15:35:

И да, файлы сессий открываются на чтение - иначе ты не смог бы менять переменные сессии ;)
 

hermit_refined

Отшельник
может эта разница в выводе из-за разных версий php ?
у себя проверяю на Apache/1.3.33 (Win32) PHP/4.4.0
Сомнительно - проверил на WinXP PHP 5.0.5, Linux PHP 4.3.11, Linux PHP 4.4.4.

И да, файлы сессий открываются на чтение - иначе ты не смог бы менять переменные сессии
Нет - я писал об открытие на чтение фунцией file_get_contents().

А не могут два скрипта параллельно работать в рамках одной сессии
Виноват, сглупил (сам использую бд через собственные обработчики, потому не замечал - ещё один повод не использовать обработчики по умолчанию). Но flock на file_get_contents не влияет - так что первый аргумент в силе.
 
Сверху