Почему fopen терпит неудачу в функции отключения реестра?

Я работаю над сайтом на общем хосте. У меня нет доступа к ini-файлу PHP или PHPini_set функция, и я не могу использоватьphp_flag или жеphp_value директивы.

Я используюset_error_handler функция для регистрации большинства ошибок, и пытается использоватьregister_shutdown_function регистрировать смертельные. Я попробовал несколько решений для обнаружения фатальных ошибок здесь:Как я могу поймать PHP фатальную ошибку , Я могу с успехом использовать эти решения для отображения ошибок на экране или для вывода пользовательской страницы ошибок, а также для регистрации нефатальных ошибок, но, похоже, я не могу регистрировать фатальные ошибки.

Это самая простая версия моих попыток:

    function errorHandler($num, $str, $file, $line) {

        $now        = strftime("%B %d, %Y at %I:%M %p", time());
        $text       = "{$now} → error {$num} in {$file}, line {$line}: {$str}\n";
        $errorlog   = "my_path/my_log";

        $new        = file_exists($errorlog) ? false : true;
        if($handle  = fopen($errorlog, 'a')) {
            fwrite($handle, $text);
            fclose($handle);
            if($new) { chmod($errorlog, 0755); }
        } else {
            print("Could not open log file for writing"); //I'm using this to test
        }

    }

    function fatalHandler() {
        $error  = error_get_last();
        if($error) {
            errorHandler($error["type"], $error["message"], $error["file"], $error["line"]);
        }
    }

    set_error_handler("errorHandler");
    register_shutdown_function("fatalHandler");    

Когда я проверяю это с нефатальной ошибкой, какecho $undefined_variable, это работает, и ошибка регистрируется правильно. Однако, если я тестирую с фатальной ошибкой, какundefined_function(), он ничего не регистрирует и печатает "не удалось открыть файл журнала". Если я тестирую с обоими присутствующими ошибками, он регистрирует нефатальную, но не фатальную.

Ваш вопрос был определен как возможный дубликат другого вопроса. Если ответы там не решают вашу проблему, пожалуйста, отредактируйте, чтобы подробно объяснить части вашего вопроса, которые являются уникальными.

@Vic Seedoubleyew -Ну, самое очевидное, это предупреждение в вопросе, который вы упомянулиfailed to open stream: ...etc не имеет ничего общего с моей ситуацией. Это предупреждение никогда не случалось. Тестовое сообщение: «не удалось открыть файл журнала для записи»мой собственный сообщение, которое я написалдля себятак что у меня есть доказательства того, чтоif заявление обрабатывается. Я сделал это сообщение. В моем вопросе очень четко отмечено, что сообщение принадлежит мне лично. Любой, кто испытывает проблему, которой я был, никогда не получит сообщениеfailed to open stream...etcпоэтому им не поможет вопрос, касающийся сообщения, которое они никогда не получали. Я предполагаю, что смысл всего этого в том, чтобы на самом деле помогать таким чайникам, как я.

Название: «Почемуfopen Ошибка в функции отключения реестра "не было моим названием. Это чужое редактирование. Мой вопрос был, почему я не мог записать в журнал внутриregister_shutdown_function, Я не зналаfopen не удалось или возникла другая проблема. Я пытался выйти из функции, но она не работала. Удаление поставленной цели (выход из функции) из вопроса и добавление чужой оценки «почемуfopen fail ", фактически делает его гораздо менее полезным для тех, кто приезжает сюда для решения ситуации, с которой я столкнулся. Если бы уже существовал вопрос, касающийся записи в файл в функции завершения работы, я бы его нашел." Почемуfopen fail "слишком конкретен, чтобы быть полезным для поиска кем-то, кто не знает, почему он не может записать в файл функцию.

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

Ответы на вопрос(2)

Ваш ответ на вопрос