PHP асинхронная запись и чтение нескольких файлов - PullRequest
2 голосов
/ 27 июня 2011

Я использую php-приложение на основе cURL для отправки запросов другому веб-серверу, который выполняет асинхронные запросы.Поэтому я создаю файлы с именем .req с информацией, которая мне понадобится при возврате и в качестве идентификатора в запросе.Запросы выполняются с использованием HTTP-XML-POST.Файл записывается с использованием: -

file_get_contents(reqs/<databaseid>.req, FILE_APPEND);

Что происходит, когда запросы генерируются массово (около 1500 в секунду), ответы начинают возвращаться с веб-сервера.Ответ перехватывается другим сценарием, который получил ответ от него и открывает файл запроса на его основе, используя: -

$aResponse = file(reqs/<databaseid>.req);

Теперь, что происходит примерно в 15% запросов, файл ()запрос завершается неудачно и генерирует запись в журнале apache, например: -

file(reqs/<databaseid>.req): failed to open stream: No such file or directory in <scriptname> on line <xyz>

При помощи более чистого сценария, который запускается позже, файл существует.

Есть идеи ?!!!

1 Ответ

1 голос
/ 27 июня 2011

Существует несколько функций для одновременного доступа к файлам, таких как flock () , но обычно проще просто использовать базу данных. Любая достойная СУБД уже сработала для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...