Если сценарий PHP достигает максимально допустимого времени выполнения, завершается ли он сразу или сразу после завершения текущей инструкции?
Я близок к максимальному времени выполнения на моем сервере, и мне не разрешено его менять. Скрипт загружает данные и записывает их в файлы. Потенциальная проблема заключается в том, что сценарий может достичь максимального времени выполнения при записи файла на диск. Поэтому для меня важно знать, разрешено ли выполнение сценария после достижения максимально допустимого времени для exec. немедленно и может привести к тому, что неполный файл будет сохранен на диске, или сценарий будет остановлен сразу после завершения последней инструкции / функции, поэтому я могу быть уверен, что все файлы на диске действительны?
Второй вопрос к этой теме:
Что произойдет, если сценарий будет завершен после функции fwrite() без выполнения fclose() - может ли это привести к созданию на диске неполного (недействительного) файла?
Третий вопрос
если сценарий не завершается немедленно, то завершается ли он после завершения текущей инструкции или вызова функции? Потому что если сценарий завершается после текущей инструкции, то выполнение fwrite() не может достичь конца этой функции и остановиться где-нибудь в теле функции.
2 ответа
Максимальное время выполнения не зависит от системных вызовов, потоковых операций и т. Д.
Ваш веб-сервер может иметь другие конфигурации тайм-аута, которые также могут прерывать выполнение PHP. Apache имеет директиву Timeout, а IIS имеет функцию тайм-аута CGI. Оба по умолчанию до 300 секунд. См. Документацию вашего веб-сервера для конкретных деталей.
см. руководство по PHP: конфигурация времени выполнения. Из этого я делаю вывод, что вызов fwrite будет правильно выполнен до конца. Сервер (например, apache) также может принудительно остановить скрипт. В этом случае fwrite может быть прерван. Но так как это 300 по умолчанию, вы, вероятно, не столкнетесь с этим временем ожидания.
Это прекращается немедленно.
Ваш ответ на 2-й вопрос: нет, fclose() не требуется.