Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
проблема записи логов в файл (php) |

01.11.2009, 10:21
|
|
Участник форума
Регистрация: 06.02.2008
Сообщений: 110
Провел на форуме: 217423
Репутация:
32
|
|
проблема записи логов в файл (php)
Вот у меня тут проблемка произошла...
На удаленном линуксовом серваке нахождится php-скрипт, который пишет логи в файл, находящийся рядом. Вот код скрипта:
PHP код:
$text = date('H-i-s')."\n";
$file = fopen("logs.txt","a");
fwrite($file, $text);
fclose($file);
Скрипт наипростейший,) Он стабильно работал на протяжении года. Раз в неделю я логи удалял, т.е. файл логов принимал нулевой размер. 3 дня назад логи перестали записываться в пустой файл и спокойно попадают в него, когда размер файла логов не нулевой.
Права на файл с логами - 666. В чем причина такого изменения?
Последний раз редактировалось mr.celt; 01.11.2009 в 10:24..
|
|
|

01.11.2009, 11:25
|
|
Участник форума
Регистрация: 24.08.2009
Сообщений: 145
Провел на форуме: 285318
Репутация:
17
|
|
$text = date('H-i-s');
$file = fopen("logs.txt","a");
fwrite($file, "$text\n");
fclose($file);
Попробуй так или
$text = date('H-i-s');
$file = fopen("logs.txt","a");
fwrite($file, "$text"\n);
fclose($file);
Так
|
|
|

01.11.2009, 11:32
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
2 qW1zer:
Второй вариант некорректный, \n не может быть за пределами кавычек
2 mr.celt:
Попробуй прежде чем писать в файл, проверять его на доступность:
PHP код:
$text = date('H-i-s')."\n";
$file = fopen("logs.txt","a");
if ($file) fwrite($file, $text . "\r\n"); #<-----
fclose($file);
|
|
|

01.11.2009, 11:38
|
|
Участник форума
Регистрация: 24.08.2009
Сообщений: 145
Провел на форуме: 285318
Репутация:
17
|
|
Pashkela
Спасибо за информацию!
А вот про доступность,разве нельзя просто открыть файл с права a+ и если файла нет,он будет создан!Или я не прав?
|
|
|

01.11.2009, 11:42
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
http://php.net/manual/en/function.fopen.php
'a' Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
'a+' Open for reading and writing; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
+ просто открывает еще и на чтение, доступность тут не причем. Если файл не существует, то создаться и при а и при а+
Доступностью в данном случае названа проверка того, что файл открылся на запись:
$file = fopen("logs.txt","a");
if ($file) ...
PS: Успел открыться (создаться), прежде чем в него начали что-то писать. Актуально при большом потоке логируемых данных, да и вообще так правильней делать
|
|
|

01.11.2009, 12:03
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
Зачем так много строк? И кстати насчет прав, а разве не 777 права нада для записи в файл?
PHP код:
<?php
file_put_contents('logs.txt',date('H-i-s')."\r\n",FILE_APPEND);
?>
|
|
|

01.11.2009, 12:05
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
даже 644 достаточно
PS: Вообще иметь на хосте что-либо 755 или 777 чревато
|
|
|

01.11.2009, 12:59
|
|
Постоянный
Регистрация: 08.11.2008
Сообщений: 498
Провел на форуме: 2603363
Репутация:
278
|
|
b3
Твой вариант не на любой случай жизни расчитан.
В PHP4 нету функции file_put_contents, поэтому вариант пашкелы тут более уместен.
|
|
|

01.11.2009, 13:03
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
Сообщение от Deathdreams
b3
Твой вариант не на любой случай жизни расчитан.
В PHP4 нету функции file_put_contents, поэтому вариант пашкелы тут более уместен.
За 2 года сайто строительства,встреча php4 всего 2-3 раза.
|
|
|

01.11.2009, 13:49
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Во варианте от Pashkela если файл не может быть открыт, то fclose вывалит warning. Плюс блочить доступ на запись к файлу неплохо, если в лог активно записи добавляются несколькими процессами.
PHP код:
$text = date('H-i-s')."\n";
$file = fopen('logs.txt','a');
if ($file)
{
flock($file,LOCK_EX);
fwrite($file, $text);
flock($file,LOCK_UN);
fclose($file);
}
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|