|
|
|
| Здравствуйте, коллеги! Читаю одну книгу по 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->f = fopen($fname, "a+");
$this->log("### __construct() colled!");
}
public function __destruct() {
$this->log("### __destruct() called!");
fputs($this->f, join("", $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. А вы как думаете, имеет этот скрипт право на жизнь? | |
|
|
|
|
|
|
|
для: pashkov
(13.12.2009 в 12:08)
| | >даже если запретить к ней доступ через .htaccess эти файлы все равно можно будет получить, например с помощью wget.
Каким образом? wget это обычная "качалка" файлов.
При соответствующих настройках веб-сервера, при обращении к нему ни одна программа доступа к защищаемой директории не получит. | |
|
|
|
|
|
|
|
для: pashkov
(13.12.2009 в 12:08)
| | Эти самые SYS_LOG и AUTH_LOG где-то определены?
Я вот почему-то думаю, что нет.
Не знаю уж как скрипт... а автор примера с неопределенными константами имеет полное право получить в морду.
Ничего личного. | |
|
|
|
|
|
|
|
для: 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 извне? | |
|
|
|
|
|
|
|
для: Pashkov
(13.12.2009 в 13:55)
| | Вот теперь совсем другое дело.
Вы об http-доступе?
Если определить эту папку этот каталог за иерархией корня документов сайта, то и отключать ничего не придется.
А так - обычным образом через .htaccess
Deny from all | |
|
|
|
|
|
|
|
для: Trianon
(13.12.2009 в 14:17)
| | Спасибо. Все получилось! Первый раз .htaccess не сработал полому что в настройках сервера было AllowOverride None. Теперь все нормально. | |
|
|
|