Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скрипт для ведения журнала сайта
 
 автор: pashkov   (13.12.2009 в 12:08)   письмо автору
 
 

Здравствуйте, коллеги! Читаю одну книгу по PHP, там есть пример скрипта, который позволяет писать логи сайта. Вот этот скрипт:
<?php
class File_Logger {
    
// Массив всех созданных объектов - журналов
    
static $loggers = array();
    
// Открытый файл
    
private $f;
    
// Имя журнала
    
public $name;
    private 
$time;
    
// Накапливаемые строки
    
private $lines = array();
    
// Закрытый конструктор: создание объектов извне запрещено!
    
private function __construct($name$fname) {
        
$this->time microtime(true);
        
$this->name $name;
        
$this->fopen($fname"a+");
        
$this->log("### __construct() colled!");
    }
    public function 
__destruct() {
        
$this->log("### __destruct() called!");
        
fputs($this->fjoin(""$this->lines));
        
fclose($this->f);
    }
    public function 
log($str) {
        
$prefix "[".date("Y-m-d h:i:s ")."{$this->name}] ";
        
$str $prefix.rtrim($str);
        
$this->lines[] = $str."\n";
    }
    
// Открытый метод, предназначенный для создания объектов класса.
    // Создать новый объект можно только с его помощью!
    
public static function create($name$fname) {
        
// Проверяем, создан-ли объект для указанного имени файла.
        // Если объект уже существует, его и возвращаем.
        
if (isset(self::$loggers[$fname])) {
            return 
self::$loggers[$fname];
        }
        
// Иначе создаем новый объект и сохраняем ссылку на него
        // в статическом массиве.
        
return self::$loggers[$fname] = new self($name$fname);
    }
}
?> 

А вот пример использования этого класса:
<?php
require_once $_SERVER['DOCUMENT_ROOT']."/lib/config.php";
require_once 
"File/Logger.php";
$logger1 File_Logger::create("System: "SYS_LOG);
sleep(1);
$logger2 File_Logger::create("Auth: "AUTH_LOG);
print 
$logger1->getTime()."  ".$logger2->getTime();
$logger1->log("Тестирование модуля прошло нормально...");
$logger2->log("Авторизация прошла нормально...");
?> 

На мой взгляд этот скрипт мог бы быть полезен для создания например лога авторизации на сайте. Но в то же время я думаю что это не безопасно. Пусть например все log-файлы лежат в каталоге /log, даже если запретить к ней доступ через .htaccess эти файлы все равно можно будет получить, например с помощью wget. А вы как думаете, имеет этот скрипт право на жизнь?

  Ответить  
 
 автор: Drago   (13.12.2009 в 13:31)   письмо автору
 
   для: pashkov   (13.12.2009 в 12:08)
 

>даже если запретить к ней доступ через .htaccess эти файлы все равно можно будет получить, например с помощью wget.

Каким образом? wget это обычная "качалка" файлов.
При соответствующих настройках веб-сервера, при обращении к нему ни одна программа доступа к защищаемой директории не получит.

  Ответить  
 
 автор: Trianon   (13.12.2009 в 13:46)   письмо автору
 
   для: pashkov   (13.12.2009 в 12:08)
 

Эти самые SYS_LOG и AUTH_LOG где-то определены?
Я вот почему-то думаю, что нет.
Не знаю уж как скрипт... а автор примера с неопределенными константами имеет полное право получить в морду.
Ничего личного.

  Ответить  
 
 автор: Pashkov   (13.12.2009 в 13:55)   письмо автору
 
   для: Trianon   (13.12.2009 в 13:46)
 

а автор примера с неопределенными константами имеет полное право получить в морду
Грубо...
Да, эти константы определены в файле /lib/config.php
<?php
// Главный конфигурационный файл сайта
// подключается ко всем сценариям
define("DS"DIRECTORY_SEPARATOR);
define("PS"PATH_SEPARATOR);
ini_set("include_path"ini_get("include_path").PS.dirname(__FILE__));

// Системный лог
define("SYS_LOG"$_SERVER['DOCUMENT_ROOT'].DS."log".DS."system.log");
// Лог авторизации
define("AUTH_LOG"$_SERVER['DOCUMENT_ROOT'].DS."log".DS."auth.log");
?> 

А можно более конкретно, какие настройки нужны чтобы полностью отключить доступ к папке log извне?

  Ответить  
 
 автор: Trianon   (13.12.2009 в 14:17)   письмо автору
 
   для: Pashkov   (13.12.2009 в 13:55)
 

Вот теперь совсем другое дело.
Вы об http-доступе?
Если определить эту папку этот каталог за иерархией корня документов сайта, то и отключать ничего не придется.
А так - обычным образом через .htaccess
Deny from all

  Ответить  
 
 автор: Pashkov   (13.12.2009 в 17:34)   письмо автору
 
   для: Trianon   (13.12.2009 в 14:17)
 

Спасибо. Все получилось! Первый раз .htaccess не сработал полому что в настройках сервера было AllowOverride None. Теперь все нормально.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования