PHP session_save_path () против общего хостинга - PullRequest
2 голосов
/ 22 ноября 2010

Я пересылаю этот вопрос, так как я не получил никаких полезных ответов в первый раз.

У меня есть простой счетчик сеансов на моем сайте, использующий session_save_path () .Код не работает в среде общего хостинга , потому что он возвращает количество всех сеансов на сервере для всех сайтов - или я так полагаю.

Может кто-нибудь сказать мне, как я могу изменить , чтобы он работал правильно.Я знаю, что счетные сессии не точно отражают цифры, но они не должны быть точными на 100%.Я также не думаю, что попадание в базу данных является разумной идеей для такой простой функции, как эта.

Должен быть способ реализовать это правильно.Вы можете помочь?

Спасибо!

<?php
//------------------------------------------------------------
// VISITORS ONLINE COUNTER
//------------------------------------------------------------
if (!isset($_SESSION)) {
  session_start();
}
function visitorsOnline()
{
    $session_path = session_save_path();
    $visitors = 0;
    $handle = opendir($session_path);

    while(( $file = readdir($handle) ) != false)
    {
        if($file != "." && $file != "..")
        {
            if(preg_match('/^sess/', $file))
            {
                $visitors++;
            }
        }
    }

    return $visitors;
}
?>

Ответы [ 3 ]

2 голосов
/ 22 ноября 2010

Вы можете установить другой путь сеанса для вашего приложения. Это также хорошая идея, чтобы другие люди не могли получать ваши данные сеанса.

Однако я думаю, что использование базы данных для этого - меньшее попадание на сервер, чем чтение каталога сеанса:)

Вы можете использовать таблицу динамической памяти, которая будет работать без доступа к диску.

1 голос
/ 22 ноября 2010

Возможно, вы сможете отличить «ваши» файлы сеанса от файлов других пользователей, используя fileowner() или is_readable() - последнее, следуя логике, что вы будете иметь доступ только к файлам сеанса (ну, надеюсь!)

Это будет сильно зависеть от конфигурации сервера, если он вообще будет работать.

Единственный действительно хороший способ, который приходит мне в голову, - это записывать ваши сценарии в отдельную таблицу базы данных для каждого сеанса, часто очищать старые записи и получать отсчет.

0 голосов
/ 22 ноября 2010

Рекомендую использовать файл .txt для сохранения счета.

Пример:

<?php 

/** 
 * Create an empty text file called counterlog.txt and  
 * upload to the same directory as the page you want to  
 * count hits for. 
 *  
 * Add this line of code on your page: 
 * <?php include "text_file_hit_counter.php"; ?> 
 */ 

// Open the file for reading 
$fp = fopen("counterlog.txt", "r"); 

// Get the existing count 
$count = fread($fp, 1024); 

// Close the file 
fclose($fp); 

// Add 1 to the existing count 
$count = $count + 1; 

// Display the number of hits 
// If you don't want to display it, comment out this line 
echo "<p>Page views:" . $count . "</p>"; 

// Reopen the file and erase the contents 
$fp = fopen("counterlog.txt", "w"); 

// Write the new count to the file 
fwrite($fp, $count); 

// Close the file 
fclose($fp); 

?>

Источник: http://www.totallyphp.co.uk/scripts/text_file_hit_counter.htm

Лучший,

Алекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...