Or die header php

Or die header php

die — Эквивалент функции exit

Описание

Данная функция эквивалентна функции exit() .

User Contributed Notes 8 notes

It is poor design to rely on die() for error handling in a web site because it results in an ugly experience for site users: a broken page and — if they’re lucky — an error message that is no help to them at all. As far as they are concerned, when the page breaks, the whole site might as well be broken.

If you ever want the public to use your site, always design it to handle errors in a way that will allow them to continue using it if possible. If it’s not possible and the site really is broken, make sure that you find out so that you can fix it. die() by itself won’t do either.

If a supermarket freezer breaks down, a customer who wanted to buy a tub of ice cream doesn’t expect to be kicked out of the building.

Beware that when using PHP on the command line, die(«Error») simply prints «Error» to STDOUT and terminates the program with a normal exit code of 0.

If you are looking to follow UNIX conventions for CLI programs, you may consider the following:

fwrite ( STDERR , «An error occurred.\n» );
exit( 1 ); // A response code other than 0 is a failure
?>

Читайте также:  Hoc react typescript example

In this way, when you pipe STDOUT to a file, you may see error messages in the console and BASH scripts can test for a response code of 0 for success:

rc@adl-dev-01:~$ php die.php > test
An error occurred.
rc@adl-dev-01:~$ echo $?
1

Ideally, PHP would write all Warnings, Fatal Errors, etc on STDERR, but that’s another story.

do_something ( $with_this ) or die ( ‘oops!’ );
?>

(in php, «die» is actually an alias of «exit»)

beware until this is often used as an error handling statement actually isn’t. is just the «or» boolean operator overloaded (short circuited)

it won’t supress any error message, won’t prevent you for fatal errors or crashes, is not an alias for «try/catch», and could has unpredictable results. it just means something like this:

— execute the first statement «»do_something($with_this)»» normally
— if the statement results TRUE: no need to execute the second statement so skip it
— else if returns FALSE. well i am not sure about the result of the whole expression, so continue with second statement «»die(‘cuack!)»»

so you can’t rely on all statements will suppress error messages or crashes, or will always return «false» on error or undesirable behavior.

for this better use the error skipping operator «@» «if» and «exit» commands, or use «try/catch» blocks

die doesn’t prevent destructors from being run, so the script doesn’t exit immediately, it still goes through cleanup routines.

Using die() can be a good option when working with HTTP Endpoints.

If your PHP Script is one, you can use die() to send back an error as plain text or JSON for example.

die(json_encode(array(‘error’ => ‘some error’)));

I always think about why duplicate commands deserve to exist, but die is one of those that I know why. It may be the same as exit(), but when you want to search through source code for die() for an unhandled error vs. a clean exit(), it helps a bit on the debugging. Not to mention backward compatibility, but we deprecate those reasons for ‘good’ reason.

Do not forget to add an error log, so you also get to know about the problem, as well as an error 500 header.

$message = ‘Description of the error.’;
error_log($message);
header($_SERVER[‘SERVER_PROTOCOL’] . ‘ 500 Internal Server Error’, true, 500);
die($message);

The «die» function is good to use when an error occurs and you need to instantly leave, and the «exit» function is good to use when a program is done without any errors. Why that? So you can search dies in the program and debug better.

  • Разные функции
    • connection_​aborted
    • connection_​status
    • constant
    • define
    • defined
    • die
    • eval
    • exit
    • get_​browser
    • _​_​halt_​compiler
    • highlight_​file
    • highlight_​string
    • hrtime
    • ignore_​user_​abort
    • pack
    • php_​strip_​whitespace
    • sapi_​windows_​cp_​conv
    • sapi_​windows_​cp_​get
    • sapi_​windows_​cp_​is_​utf8
    • sapi_​windows_​cp_​set
    • sapi_​windows_​generate_​ctrl_​event
    • sapi_​windows_​set_​ctrl_​handler
    • sapi_​windows_​vt100_​support
    • show_​source
    • sleep
    • sys_​getloadavg
    • time_​nanosleep
    • time_​sleep_​until
    • uniqid
    • unpack
    • usleep

    Источник

    Функция header

    HTTP заголовки это специальная информация, которая присоединяется к документу, то есть, к тому файлу, который запрашивается браузером с сервера. Когда мы вбиваем в адресную строку какой-нибудь адрес то, соответственно, запрашиваем на сервере по этому адресу какой-нибудь документ. Эта информация(документ) видна у нас на экране. Но кроме видимой части есть еще и невидимая — те самые HTTP заголовки, которые отправляются сервером браузеру и они нужны для того, чтобы браузер корректно отобразил страницу. То есть, заголовки подсказывают браузеру как показать страницу или как отдать страницу.

    Для браузера firefox: кнопка F12 -> сеть -> кликнуть «статус» и обновить страницу :

    header1

    Среди прочего в заголовках отправляется информация о кодировке страницы, как давно модифицировалась страница, информация о том, что это за страница (html-страница, обычный текстовый документ; или, вместо того чтобы показать страницу, отдать ее на скачивание)

    Установление кодировки

    Один, из наиболее часто используемых вариантов функции header , это использование функции для установления кодировки.

    В файле index.php в папке с нашим уроком запишем: привет, мир! и посмотрим в браузере, что получили. Мы можем получить крабозябры . Это происходит по тому, что браузер будет открывать документ в той кодировке, которую сервер отправил в заголовках по умолчанию. Если кодировка нашего документа не совпадает с кодировкой сервера — получим крабозябры.

    Кодировка для всех частей нашего приложения должна быть единой .

    Рекомендуется всегда использовать кодировку utf-8 — как универсальную кодировку.

    Использование метатэга — не всегда помогает, потому что сервер может отправлять по умолчанию свою кодировку в заголовках и в этом случае она будет иметь больший приоритет, чем метатэг charset .

    В этом случае мы должны переопределить кодировку сервера с помощью функции header . (php.net)

    Функция header позволяет указать нужную нам кодировку.

    header ( ‘Content-Type: text/html; charset=utf-8’ );
    ?>

    где:
    text/html — тип документа;
    charset=utf-8 — нужная нам кодировка.

    Если посмотрим заголовки в «разработка/инструменты разработчика/сеть» (в firefox ), то увидим, что они дополнились кодировкой charset=»UTF-8″ , то есть, мы указали браузеру (отправили заголовки), что нужно использовать именно данную кодировку. При этом она имеет приоритет над метатэгом charset .

    header2

    Еще один способ установления кодировки по умолчанию — это использовать специальный файл .htaccess . Данный файл является файлом настройки сервера Apache .

    Создадим даннный файл в нашей папке.

    Установим кодировку для сервера по умолчанию с помощью специальной директивы AddDefaultCharset .

    Данная директива заставляет сервер отправлять в заголовках кодировку, указанную в качестве значения данной дериктивы.

    Организация редиректа

    Функцию header часто используют для редиректа .

    Создадим новый файл — inc.php и выведем в нем строку: «привет из подключаемого файла» .

    echo ‘Привет из подключаемого файла’ ;
    ?>

    В индексном файле используем функцию header для редиректа. Его можно сделать двумя командами:
    — командой ‘ Location ‘
    — командой ‘ refresh ‘

    header ( ‘Content-Type: text/html; charset=utf-8’ );
    header ( ‘Location: inc.php’ ); // где inc.php — относительный путь к файлу
    ?>

    При работе с редиректом нужно помнить что редирект происходит не сразу. Когда отрабатывает
    данная команда ( header(‘Location: inc.php’); ), выполнение файла продолжается дальше.
    Чтобы сделать безусловный редирект и не выполнять дальнейший код нужно воспользоватся
    одной из двух команд — функция die (пер.- умри) и функция exit (пер.- выйти).
    Эти команды почти всегда рекомендуется использовать после редиректа.

    Чтобы убедиться, что у нас код после команды редиректа выполняется, используем редирект
    с задержкой: header(‘refresh: 5, url’) , где
    5 — время задержки в секундах,
    url=inc.php — адрес, на который должен быть перенаправлен пользователь (если внешний адрес,
    то используем — http, если внутренний, то используем — относительный путь к файлу ).
    Запускаем файл index.php:

    header ( ‘Content-Type: text/html; charset=utf-8’ );

    header( ‘Location: inc.php’ );
    // — где inc.php — относительный путь к файлу

    header ( ‘refresh: 5, url=inc.php’ );
    // — адрес, на который должен быть перенаправлен пользователь

    — после загрузки документа весь код у нас выполнился — выводится: привет мир!
    После пятисекундной задержки нас перенаправляет на другой файл ( inc.php ) — выводится: привет из подключаемого файла .
    Чтобы код не выполнялся используем любую из функций: либо exit , либо die .

    header ( ‘Content-Type: text/html; charset=utf-8’ );
    header( ‘Location: inc.php’ );
    // — где inc.php — относительный путь к файлу

    header ( ‘refresh: 5, url=inc.php’ );
    exit ;
    // die;
    ?>

    — после загрузки документа код у нас не выполняется — видим пустую страницу.
    После пятисекундной задержки перенаправляемся на другой файл — выводится: привет из подключаемого файла .

    Проблемы вывода

    Функция header отправляет заголовки в браузер. Они помогают коректно отобразить страницу. Эти заголовки должны бать отправленны раньше перед самим контентом страницы, поскольку браузер должен проанализировать заголовки и, в соответствии с ними, показать нашу страницу. Поэтому заголовки должны быть всегда отправленны до вывода , при этом заголовки могут отправлятся только один раз .
    Если мы инициализируем вывод в браузер, то заголовки автоматически будут отправленны. Это значит, что если перед функцией header есть какой-то вывод в браузер, то она просто не отработает.

    1. В этом легко убедиться, если в индексном файле поставим какой нибудь вывод, например, перенос строки перед функцией header :

    — не удается изменить информацию заголовка — заголовки уже отправленны .

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

    2. С проблемой вывода можно столкнуться при подключении какого нибудь файла.

    Например, мы подключаем файл inc.php, и в нем есть какая-то переменная — $test = ‘TEST’ .

    В индексном файле мы хотим использовать данную переменную: $test ?> .

    Источник

    PHP: Utilizing exit(); or die(); after header(«Location: «);

    I have been looking for an answer on this as well. What I found:

    Why die() or exit():

    If you don’t put a die() or exit() after your header(‘Location: http://something’) your script may continue resulting in unexpected behaviour. This may for example result in content being disclosed that you actually wanted to prevent with the redirect (HTTP 301). The aforementioned may not directly be visible for an end user as the browser may not render it (due to the 301). Conclusion, the exit() and die() functions stop the script from continuing.

    Difference:

    I also wanted to know the difference between the functions as it seems there is none. However, in PHP, there is a distinct difference in Header output. In the examples below I chose to use a different header but for sake of showing the difference between exit() and die() that doesn’t matter.

    Exit() in action

    HTTP/1.1 304 Not Modified Connection: Keep-Alive Keep-Alive: timeout=5, max=100 

    Die() in action

    HTTP/1.1 304 Not Modified Connection: close 

    Difference

    So, die() closes the connection and exit() doesn’t. It depends on performance whether or not you want to keep the connection open or close it. Both have advantages and disadvantages and depends on your specific requirement(s).

    Solution 2

    This functions are used to interrupt script execution. You need to use exit or die to stop execution of your script after header(«Location: » . getenv(«HTTP_REFERER»)); , because, in other case, your script will be executed till the end, what can cause some unexpected behavior.

    Solution 3

    Answer has already been accepted however it seems everyone is missing the glaring WTF in the question:

    header("Location: " . getenv("HTTP_REFERER")); 
    1. Returning a referer is optional on the part of the user agent
    2. it can easily be faked
    3. there is no method for telling the user the login has failed
    4. there is no HTTP semantic communication of an authentication failure
    5. while the environment variable HTTP_REFERER should be the same as the request header variable, it is not specified in RFC 3875, therefore even where presented to the webserver in the request, getenv(«HTTP_REFERER») may return a different value

    Solution 4

    Ok, it has been a long time since the last answer was given. Anyway 😀 somehow I stumbled across a similar prob and see what my solution was:

    die( Header( "Location: mytarget.php?arg1=foobar" ) ); 

    Two birds with one stone — seems to work for me.

    Источник

Оцените статью