2012-11-26 3 views
4

Я немного новичок в PHP, поэтому мне интересно, не могли бы вы мне что-нибудь объяснить.PHP-файл с несколькими экземплярами одного файла

Я пытаюсь написать класс, который будет прикреплен к файлу журнала. Я написал класс, чтобы сам ресурс был статичным в классе Logger. Это отлично работает для меня, когда я тестирую, поскольку у меня может быть несколько классов, создающих экземпляр объекта Logger, но все будут использовать один и тот же статический ресурс для записи в файл.

Сказанное, теперь я сталкиваюсь с вопросом о нескольких экземплярах PHP (несколько пользователей, загружающих мою страницу), а точнее: параллелизм.

Вопросы:

  1. , когда мой сайт испытывает одновременно экземпляры PHP, которые используют регистратор, они будут бороться за доступ к этому файлу?

  2. Я нахожусь на UBUNTU, но будет ли это иметь значение в Windows?

  3. В моем файле logger я проверяю каждое X количество добавленных строк, чтобы увидеть, какой размер файла, если размер больше Y, я закрываю этот файл и «поворачиваю» файлы (mylog.log2 становится mylog.log3, mylog.log1 становится mylog.log2, mylog.log становится mylog.log1) и создает новый файл mylog.log. Будет ли это беспокоить, если к нему пишут несколько экземпляров? если да, то как это можно правильно обработать?

Извините за NEWB вопрос ...

ответ

7

До тех пор, пока у вас есть ваш регистратор открыть файл в Append режим (например, fopen("my.log", "a") или подобное), каждый человек должен иметь возможность писать в файл без потери данных (ОС позаботится о том, чтобы все было добавлено без перезаписи). Тем не менее, заказ записей в файл не гарантируется в разных экземплярах - например. вы, вероятно, получите вкрапленные записи журнала.

Например, если Экземпляр пишет строки a, b, c в таком порядке, и экземпляр B пишет строки 1, 2 и 3, вы можете получить следующий результат:

1 
a 
b 
2 
c 
3 

или любой другой перемежения.

+0

Янтарь, спасибо за ответ, вы могли бы рассмотреть вопрос № 2 и 3 выше? – NEW2WEB

+0

Конечно. Вы должны обрабатывать вращение журнала с помощью отдельной (и единственной) программы, например. Пакет 'logrotate' Ubuntu - см.' Man logrotate' для деталей. В противном случае вы, вероятно, столкнетесь с условиями гонки между различными экземплярами регистратора. – Amber

+0

Кроме того, мой первоначальный ответ должен выполняться как в Windows, так и в Linux и OS X - пока вы открываете файл в режиме добавления, все может делиться файлом. (Мой комментарий о вращении журнала также имеет истинную кросс-платформенную платформу.) – Amber

Смежные вопросы