Intereting Posts
Laravel 5.3 Войти переадресации на разные страницы для нескольких пользователей Как предотвратить печать на моем веб-странице? PHP DOM заменяет элемент новым элементом Можно ли запустить функцию в переменной шаблона Silverstripe для форматирования вывода? Неустранимая ошибка WordPress php: вызов неопределенной функции language_attributes ()? Пользователи открытого текста Symfony2 не работают Проблема маршрутизации с Slim framework Сортировка несортированного текстового файла и переписывание в тот же текстовый файл в отсортированном порядке как добавить файл css в mpdf Другой вопрос dateTime Как я могу пропустить страницу подтверждения оплаты PayPal? Laravel Eloquent :: Find () возвращает NULL с существующим идентификатором Ошибка анализа: синтаксическая ошибка, неожиданный T_ELSE, и я не знаю, почему Случайная запись из базы данных mysql с помощью CodeIgniter Как построить график реального времени (гистограмма) с использованием данных, полученных в текстовом файле

Как выйти из скрипта PHP без вызова деструктора?

Работа с инфраструктурой MVC и контроллером отображает страницу в деструкторе. Я загружаю файл через php, поэтому в конце действия скрипт должен заканчиваться.

Как закончить скрипт без вызова деструктора?

Есть ли лучшее решение?

exit и die вызовите деструктора.

Solutions Collecting From Web of "Как выйти из скрипта PHP без вызова деструктора?"

Как сказал Дэвид: вам нужно вызвать exit () внутри деструктора, чтобы остановить его.

Если, однако, вы просто хотите остановить визуальный вывод, вызванный этими деструкторами, но не любые другие побочные эффекты (закрытие файлов, закрытие базы данных), они могут сделать, тогда лучше всего просто убить дальнейший вывод, но оставить только деструкторы. Который, по моему мнению, будет маршрутом, поскольку деструкторы, как правило, существуют по одной важной причине: очистка.

вы можете сделать это, манипулируя буферизированным выходом:

<?php class Tester{ public function devNull($string){ return ""; } public function runAndBreak(){ print "run" . PHP_EOL; // if any output buffer is working, flush it and close it if(ob_get_level()) ob_end_flush(); // redirect new buffer to our devNull ob_start(array($this,'devNull')); exit(); print "still running"; } function __destruct(){ print "destructor" . PHP_EOL; } } $t = new Tester(); $t->runAndBreak(); 

это приведет только к run печати, а не к деструктору. Это делается путем предоставления вашей собственной процедуры обратного вызова ob_start, которая обрабатывает и затем возвращает результат. В нашем случае мы просто отбрасываем его, возвращая пустую строку.

См. Этот ответ . Попробуйте создать деструктор в классе, который загружает файл, который проверяет, действительно ли файл отправлен в браузер, и если это так, вызовите exit () в этом деструкторе.

Это, безусловно, остановит ваш скрипт, но будьте осторожны, если вы запустите такой сервер, где один процесс обслуживает несколько запросов PHP, это также остановится:

 $pid = getmypid(); exec("kill $pid"); exec("TSKILL $pid");