|
01.10.2015, 20:27
|
Аспирант
|
|
Регистрация: 07.07.2015
Сообщений: 37
|
|
Работа php скриптов с xml файлом
Вопрос в следующем.
На сервере есть скрипт php который делает записи в xml файл. Есть и другие скрипты php которые тоже запрашивают этот же файл xml.
В какой последовательности работают с файлом xml скрипты? т.е. когда запросил его один скрипт и вносит в него изменения и в этот момент приходит запрос от другого скрипта. Второй запрос будет выполнен, только после того, как первый скрипт закончит работу с xml файлом?
это разруливает сам сервер или надо это как-то дополнительно указывать?
|
|
01.10.2015, 22:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Если скрипт не блокирует доступ к файлу, то он доступе любому, РНР автоматом не ставит блокировку на файлы. Блокировка устанавливается при сохранении в файл функцией file_put_contents().
|
|
02.10.2015, 10:45
|
Аспирант
|
|
Регистрация: 07.07.2015
Сообщений: 37
|
|
т.е. надо в скрипте прописать, что когда он запрашивает xml файл, то он должен его блокировать для остальных обращений? а потом сделав изменения опять разблокировать?
а другие скрипты при обращении в этот момент получают ошибку?
|
|
02.10.2015, 11:29
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Любой файл с многопользовательским доступом на запись нужно блокировать. Другие скрипты не получат ошибку, а будут ждать освобождения файла, а вот в случае превышения времени выполнения скрипта сервер уже может вернуть соответствующее сообщение. Вопрос только в том какие это другие скрипты, других скриптов быть не может, а вот другие пользователи запускающие свои процессы да.
Последний раз редактировалось laimas, 02.10.2015 в 11:40.
|
|
02.10.2015, 12:22
|
Аспирант
|
|
Регистрация: 07.07.2015
Сообщений: 37
|
|
друтие скрипты это значит, что один скрипт заносит запись в xml файл, а другой может в это время его читать.
а каким образом блокируются файлы с многопользовательским доступом на запись?
|
|
02.10.2015, 12:38
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Читать будут, вам ведь нужна блокировка на запись - LOCK_EX.
|
|
02.10.2015, 13:04
|
Аспирант
|
|
Регистрация: 07.07.2015
Сообщений: 37
|
|
есть xml файл в который записываются сообщения, пользователей. делает это один и тот же скрипт. вопрос, что будет, если один вносит запись, и в это время тоже самое пытается сделать ещё кто-то?
|
|
02.10.2015, 13:09
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Блокировка на запись предотвращает одновременную запись. Хотите нормальной блокировки - база данных, в нее нельзя записать одновременно, но кроме этого можно установить блокировки на доступ и на время, хотя это делать это нужно в разумных пределах.
С файлами обеспечить такую гибкость сложно, если не написать самому механизм ее обеспечивающий.
|
|
02.10.2015, 14:59
|
Аспирант
|
|
Регистрация: 07.07.2015
Сообщений: 37
|
|
я думал, что такие ситуации разруливает сервер. Типа как операционная система компа. Спасибо за ответы.
|
|
02.10.2015, 15:20
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
С базой надо работать, а не с файлами, она обеспечивает механизм многопользовательского доступа, устанавливая блокировки где требуется, что обеспечивает целостность данных.
|
|
|
|