Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа php скриптов с xml файлом (https://javascript.ru/forum/misc/58633-rabota-php-skriptov-s-xml-fajjlom.html)

guru_nemo 01.10.2015 20:27

Работа php скриптов с xml файлом
 
Вопрос в следующем.
На сервере есть скрипт php который делает записи в xml файл. Есть и другие скрипты php которые тоже запрашивают этот же файл xml.
В какой последовательности работают с файлом xml скрипты? т.е. когда запросил его один скрипт и вносит в него изменения и в этот момент приходит запрос от другого скрипта. Второй запрос будет выполнен, только после того, как первый скрипт закончит работу с xml файлом?
это разруливает сам сервер или надо это как-то дополнительно указывать?

laimas 01.10.2015 22:48

Если скрипт не блокирует доступ к файлу, то он доступе любому, РНР автоматом не ставит блокировку на файлы. Блокировка устанавливается при сохранении в файл функцией file_put_contents().

guru_nemo 02.10.2015 10:45

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

laimas 02.10.2015 11:29

Любой файл с многопользовательским доступом на запись нужно блокировать. Другие скрипты не получат ошибку, а будут ждать освобождения файла, а вот в случае превышения времени выполнения скрипта сервер уже может вернуть соответствующее сообщение. Вопрос только в том какие это другие скрипты, других скриптов быть не может, а вот другие пользователи запускающие свои процессы да.

guru_nemo 02.10.2015 12:22

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

laimas 02.10.2015 12:38

Читать будут, вам ведь нужна блокировка на запись - LOCK_EX.

guru_nemo 02.10.2015 13:04

есть xml файл в который записываются сообщения, пользователей. делает это один и тот же скрипт. вопрос, что будет, если один вносит запись, и в это время тоже самое пытается сделать ещё кто-то?

laimas 02.10.2015 13:09

Блокировка на запись предотвращает одновременную запись. Хотите нормальной блокировки - база данных, в нее нельзя записать одновременно, но кроме этого можно установить блокировки на доступ и на время, хотя это делать это нужно в разумных пределах.
С файлами обеспечить такую гибкость сложно, если не написать самому механизм ее обеспечивающий.

guru_nemo 02.10.2015 14:59

я думал, что такие ситуации разруливает сервер. Типа как операционная система компа. Спасибо за ответы.

laimas 02.10.2015 15:20

С базой надо работать, а не с файлами, она обеспечивает механизм многопользовательского доступа, устанавливая блокировки где требуется, что обеспечивает целостность данных.


Часовой пояс GMT +3, время: 08:32.