Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

php5.глава29. Файл handlers.php (Bear Deon)
Author Message
Bear Deon
Заглянувший
Warnings: 1


Joined: 24 Feb 2007
Posts: 10
Карма: 0
   поощрить/наказать

Location: Уфа(Москва)

PostPosted: Sat Feb 24, 2007 10:17 pm (написано за 5 минут 37 секунд)
   Post subject: php5.глава29. Файл handlers.php
Reply with quote

Начал я тестить этот сценарий, придварительно отключив куки. При первом запуске создались две папки, как и полагается. Но вот файлы не создавались =((. При попытке обновить страницу, обновлялся тока идентификатор но счетчик сессий не увеличивался. При нажатие "Открыть дочернее окно браузера." открывалось подобающее окно, но счетчик все равно стоял как мертвый. При попытке убрать собак(@) из ses_write, браузер выдал такую ошибку:

Warning: mkdir(z:\home\localhost\www\test\dkoterov\session/sessiondata) [function.mkdir]: File exists in z:\home\localhost\www\test\dkoterov\session\handlers.php on line 24

Warning: mkdir(z:\home\localhost\www\test\dkoterov\session/sessiondata/test2) [function.mkdir]: File exists in z:\home\localhost\www\test\dkoterov\session\handlers.php on line 25

Fatal error: Call to undefined function: file_put_contents() in z:\home\localhost\www\test\dkoterov\session\handlers.php on line 27


Чтобы это значило. У меня стоит последний денвер. Ну и Тока что РНР5 еще поставил из расширений, в виде модуля CGI. Так ее нельзя подружить с PHP4.


<?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));
  echo "сессия удалена";
}

// Сборка мусора - ищем все старые файлы и удаляем их
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("test2");
session_start();
$t=session_id();
// Увеличиваем счетчик в сессии.
$_SESSION['count'] = @$_SESSION['count'] + 1;
?>
<h2>Счетчик</h2>
В текущей сессии работы с браузером Вы открыли эту страницу
<?=$_SESSION['count']?> раз(а).<br>
Закройте браузер, чтобы обнулить счетчик.<br>
<a href="<?=$_SERVER['SCRIPT_NAME']?>" target="_blank">Открыть дочернее окно браузера</a>.
<br>
<blockquote>
<b>Номер сессии:</b> <h2><?=$t?></h2>
</blockquote>
Back to top
View user's profile Send private message
Bear Deon
Заглянувший
Warnings: 1


Joined: 24 Feb 2007
Posts: 10
Карма: 0
   поощрить/наказать

Location: Уфа(Москва)

PostPosted: Sun Feb 25, 2007 9:06 pm (спустя 22 часа 49 минут; написано за 3 минуты 40 секунд)
   Post subject:
Reply with quote

Оказывается дело в том что, функция file_put_contents() доступна только в 5PHP php.net/file_put_contents. А теперь мучаюсь с вопросом, как же протестить этот скрипт если у меня 4РНР. Хотелось бы поставить 5-ку в виде модуля апача, но не знаю как это зделать. Так что если кто сможет, подскажите пожалуйста как можно снести 4-ку и поставить 5-ку, как модуль апач, а не как модуль CGI.
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sun Feb 25, 2007 9:37 pm (спустя 30 минут; написано за 48 секунд)
   Post subject:
Reply with quote

Bear Deon
Code (php): скопировать код в буфер обмена
function file_put_contents($file, $contents)
{
        if(!$fp = fopen (www.php.net/fopen)($file,'w')) return false;
        fputs (www.php.net/fputs)($fp,$contents);
        fclose (www.php.net/fclose)($fp);
        return true;
}
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun Feb 25, 2007 10:19 pm (спустя 42 минуты; написано за 2 минуты 24 секунды)
   Post subject:
Reply with quote

Деинсталировал предыдущий Денвер и поставил Денвер с 5ой РНР. www.denwer.ru/packages/base_php5.html
Протестил скрипт и все нормуль. Работает =)
Тему можно закрывать. Спасибо за участие.



Вопрос решен, тему можно закрыть.
Back to top
Bear Deon
Заглянувший
Warnings: 1


Joined: 24 Feb 2007
Posts: 10
Карма: 0
   поощрить/наказать

Location: Уфа(Москва)

PostPosted: Mon Feb 26, 2007 10:49 am (спустя 12 часов 29 минут; написано за 35 секунд)
   Post subject:
Reply with quote

Спасибо. Тему можно закрывать.

Вопрос решен, тему можно закрыть.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML