Я пишу скрипт на PHP, в котором мне нужно было записать время работы системы, текущее время и количество пользователей, вошедших в систему, в файл журнала и постоянно обновлять через crontab.
Мне нужна помощь в том, чтобы обновления накапливались в файле и постоянно добавлялись. Пока что всякий раз, когда мой скрипт выполняется, самое новое обновление перезаписывает предыдущее обновление.
Я попытался объявить массив записей и, перебирая массив, помещать содержимое обновления в массив (это может быть немного недоделанной логикой с моей стороны).
Мой код:
$fileName = '../so-and-so directory/output.log';
$dt = date('m/d/y');
$time = date('h:i A');
$data = shell_exec('uptime');
$uptime= explode(' up ', $data);
$uptime = explode(', ', $uptime[1]);
$uptime = $uptime[0].','.$uptime[1];
$users = system('w', $who);
$array = new SplFixedArray(3);$fileLog = fopen($fileName, 'w');
$fileString = "Date: ".$dt. "\n". " Time: ".$time . "\n".
"System uptime ". $uptime ."\n" ."Users " . $users;
foreach ($array as $entry) {
array_push(file_put_contents($fileName, $fileString));
}
fclose($fileLog);
Я чувствую, что решение очень простое, но мне его не хватает. Кто-нибудь, пожалуйста, подскажите мне?
Файловый режим «w» усекает файл при открытии. «а» добавляет к концу вместо. Увидеть fopen(3)
или документацию PHP для деталей.
Также, file_put_contents()
уничтожает файл Пытаться fwrite()
вместо.
капля fopen; просто используйте
file_put_contents($fileName, $fileString);
file_put_contents
перезапишет существующий файл по умолчанию.
Короче:
$fileName = '../so-and-so directory/output.log';
$dt = date('m/d/y');
$time = date('h:i A');
$data = shell_exec('uptime');
$uptime= explode(' up ', $data);
$uptime = explode(', ', $uptime[1]);
$uptime = $uptime[0].','.$uptime[1];
$users = system('w', $who);
$fileString = "Date: ".$dt. "\n". " Time: ".$time . "\n".
"System uptime ". $uptime ."\n" ."Users " . $users;
file_put_contents($fileName, $fileString);
Вот и получается, что мне нужно было отредактировать мой файл crontab следующим образом:
* * * * * such-and-such-script.php >> ../so-and-so directory/output.log 2>&1
Чтобы они добавлялись без того, чтобы предыдущий был перезаписан новым. Я также потерял fopen () и вместо того, чтобы выполнить file_put_contents, я сделал fwrite () в файл. Это прекрасно работает сейчас. Спасибо!