При запуске CRON «require» завершается сбоем

У меня есть скрипт резервного копирования, который запускается из браузера без проблем. Он извлекает данные из базы данных и записывает их в ZIP-файл объемом менее 2 МБ.

Это в основном запускается с сервера, но не работает (тихо), когда попадает в определенную строку:

require ('/absolute-path/filename');  // pseudo filespec

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

$fs = '/absolute-path/filename'; // pseudo filespec
if (is_readable ($fs) ) {
mail('myaddress','cron','before require'); // this works reliably
require ($fs); // can be an empty file ie. <?php ?>
mail('myaddress','cron','after require'); // this never works.
}

Когда я закомментирую require($fs)Сценарий продолжается (в основном см. ниже).

Я проверил окончания строки (невидимые символы). Не на каждом include-ed-файл, но, безусловно, тот, который работает, имеет окончания новой строки (NL) (в стиле Linux), в отличие от новой строки + возврат каретки (NL CR) (стиль Windows).

Я пробовал требовать пустой файл (просто <?php ?>) чтобы увидеть, пройдёт ли сценарий эту точку. Это не так.

Я пробовал звонить mail(); от включенный скрипт. я получить Почта. Итак, еще раз, я знаю, что путь правильный. Он выполняется, но он никогда не возвращается, и я не получаю ошибок, по крайней мере, в журнале PHP. Работа CRON умирает …

Это новый сервер. Я только что перенес приложение из PHP 5.3.10 в PHP7. Все остальное работает.

Я не думаю, что у меня заканчивается память. На этом этапе сценария я даже не получил данные из базы данных, но это похоже на некоторую кумулятивную ошибку, потому что, когда я закомментирую ошибочную строку, ошибка переходит к другому, столь же загадочному молчаливому отказу далее по коду.

Существуют ли другие полезные тесты, журналы или условия среды, на которые мне следует обратить внимание? Что-нибудь, что я мог бы спросить у веб-хостинга?

2

Решение

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

die('test');
__halt_compiler();

в начале строки, начиная сверху, на строке после первого <?php тег и посмотреть, если он загружается. Если он медленно смещает строку за строкой (хотя не обрезает управляющую структуру!) И проводит повторное тестирование после каждого раза и когда он умирает, вы знаете, что ошибка находится в строке выше.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]