Zastaví vykonávanie skriptu PHP a vygeneruje správu vo formáte HTML.
Analóg základnej funkcie PHP die(). Rozdiel je v tom, že wp_die() vypíše chybovú stránku vo formáte HTML. Odporúča sa použiť túto funkciu, keď potrebujete úplne zastaviť PHP. Neodporúča sa používať túto funkciu často - snažte sa nezobrazovať chyby používateľom.
sa vracia
Nevráti nič, ale ukončí PHP.
Použitie
wp_die($správa, $titul, $args); $správa (zmiešané) Chybové hlásenie alebo úplný objekt triedy WP_Error.Predvolené: ""$title (reťazec/pole/číslo/objekt/logická hodnota) Názov chyby. Ak použijete objekt WP_Error, názov bude prevzatý z $data["title"], tento parameter si môžete vopred zmeniť.
Predvolené: ""$args (reťazec/pole)
Rôzne argumenty kontrolujúce správanie.
Predvolená hodnota: nie
- smer textu (riadok)
Smer textu: ltr (zľava doprava) alebo rtl (sprava doľava).
Predvolené: "ltr"
odpoveď (číslo)
Stavový kód HTTP. 500 - interná chyba servera. Celý zoznam.
Predvolená hodnota: 500
spätný_link (logický)
Či sa má alebo nemá zobraziť spätný odkaz na predchádzajúcu stránku.
Predvolená hodnota: nepravda
Príklady
#jeden. Ukážka použitia
Pomocou funkcie wp_die() sa pozrime, čo je momentálne v globálnej premennej $post:
Add_filter("body_class", "add_body_class_cb"); funkcia add_body_class_cb($classes) (globálny $post; wp_die("
" var_export($post, true) .""); }
#2. Úprava štýlu bloku wp_die
Ak stránka potrebuje zmeniť dizajn tohto bloku, môžete použiť háčik wp_die_handler:
500); $r = wp_parse_args($args, $predvolené); $have_gettext = function_exists("__"); if (function_exists("is_wp_error") && is_wp_error($message)) ( if (empty($title)) ( $error_data = $message->get_error_data(); if (is_array($error_data) && isset($error_data[" title"])) $title = $error_data["title"]; ) $errors = $message->get_error_messages(); switch (count($errors)) (case 0: $message = ""; break; case 1 : $message = ""; prestávka; predvolená hodnota: $message = "
- \n\t\t
- ".join(" \n\t\t
- ", $errors). " \n\t
$späť_text
"; ) if (! did_action("admin_head")) : if (!headers_sent()) ( status_header($r["response"]); nocache_headers(); header("Typ obsahu: text/html; charset= utf-8"); ) if (empty($title)) $title = $have_gettext ? __("WordPress › Chyba") : "WordPress › Chyba"; $text_direction = "ltr"; if (isset($r[ "text_direction"]) && "rtl" == $r["text_direction"]) $text_direction = "rtl"; elseif (function_exists("is_rtl") && is_rtl()) $text_direction = "rtl"; ?> >Kód wp zomrieť: wp-includes/functions.php WP 5.2.2
$args); ) elseif (is_int($title)) ( $args = array("response" => $title); $title = ""; ) if (wp_doing_ajax()) ( /** * Filtruje spätné volanie na zastavenie spustenia WordPress pre Žiadosti Ajax.* * @od verzie 3.4.0 * * volateľný @param $function Názov funkcie spätného volania.*/ $function = apply_filters("wp_die_ajax_handler", "_ajax_wp_die_handler"); ) elseif (wp_is_json_request()) ( /** * Filtre spätné volanie na zastavenie vykonávania WordPress pre požiadavky JSON. * * @od 5.1.0 * * @param callable $function Názov funkcie spätného volania. */ $function = apply_filters("wp_die_json_handler", "_json_wp_die_handler"); ) elseif (wp_is_jsonp_request() ) ( /** * Filtruje spätné volanie na zastavenie vykonávania WordPress pre požiadavky JSONP. * * @od verzie 5.2.0 * * @param callable $function Názov funkcie spätného volania. */ $function = apply_filters("wp_die_jsonp_handler", "_jsonp_wp_die_handler") ; ) elseif (defined("XMLRPC_REQUEST") && XMLRPC_REQUEST) ( /** * Filtruje spätné volanie na zastavenie spustenia WordPress n pre požiadavky XML-RPC. * * @od 3.4.0 * * @param callable $function Názov funkcie spätného volania. */ $function = apply_filters("wp_die_xmlrpc_handler", "_xmlrpc_wp_die_handler"); ) elseif (wp_is_xml_request() || isset($wp_query) && (function_exists("is_feed") && is_feed() || function_exists("is_comment_feed") && is_comment_feed() || function_exists("is_trackback(")) && is_trackback ) ( /** * Filtruje spätné volanie na zastavenie vykonávania WordPress pre požiadavky XML. * * @od verzie 5.2.0 * * @param callable $function Názov funkcie spätného volania. */ $function = apply_filters("wp_die_xml_handler", "_xml_wp_die_handler") ; ) else ( /** * Filtruje spätné volanie na zastavenie vykonávania WordPress pre všetky požiadavky iné ako Ajax, JSON, XML. * * @od 3.0.0 * * Volateľné @param $funkcia Názov funkcie spätného volania. */ $function = apply_filters("wp_die_handler", "_default_wp_die_handler"); ) call_user_func($funkcia, $správa, $názov, $args); )Tu ma zmiatli, aby som napísal démona v PHP. Tie. skript, ktorý vykoná určité akcie stanovený počet krát za stanovený počet hodín v náhodnom čase (vždy náhodne), a to všetko bez použitia cronu „a.
Predtým som sa nikdy neobťažoval, ale potom po nastavení úlohy som si začal myslieť, že to nie je možné, že php skript by mal volať prehliadač ... no úloha bola nastavená, musí sa vykonať.
Prvá myšlienka je zakázať časový limit vykonávania skriptu. Zakázané hostiteľom.
Druhou myšlienkou je periodicky opakovať požiadavku Ajaxu (áno, aspoň raz za sekundu) pomocou Javascriptu. - nie je možné (požiadavka zákazníka).
V skutočnosti sa ukázalo, že prehliadač by nemal byť otvorený a nemali by sa používať crony a skript by mal fungovať nezávisle od používateľa na dobu neurčitú. Prirodzene, malo by to minimálne zaťažiť systém.
1. Balíček cigariet, noc, Google, doky, knihy, manuály….
dostanem 1…
Na výstupe dostanem:
Task_1:
Implementujte generátor času vykonávania skriptu na základe daného počtu opakovaní a počtu hodín. Tieto časy si niekde uložte.
Task_2:
Pracujte po zatvorení prehliadača
Task_3:
Po uplynutí časového limitu spustenia skriptu nezlyhajte
Task_4:
Konajte v správnom čase.
Takže…
Počiatočné údaje zapíšeme do konfigurácie:
session_start(); // Začiatok relácie $num_starts = 120; // Počet spustení skriptu za časový interval $hours = 1; // Počet hodín spúšťania skriptu $num_starts krát. $time_sec = $hodín*3600; // Počet sekúnd behu cyklu $time_to_start = array(); // V skutočnosti pole s časmi spustenia ignore_user_abort(1); // Ignorovať odpojenie prehliadača
Ďalej napíšeme funkciu, ktorá nám pomôže vygenerovať počiatočné časy.
V ňom vygenerujeme náhodné číslo od 0 do počtu sekúnd v pôvodnom intervale.
/****** * @desc Vygeneruje interval medzi spusteniami. */ funkcia add_time2start() ( globálne $time_sec, $time_to_start; $new_time = time()+rand(0, $time_sec); if (!in_array($new_time, $time_to_start)) ( // Ak takýto čas neexistuje v poli - pridajte $time_to_start = $new_time; ) else ( add_time2start(); // Ak takýto čas už existuje, vygenerujte. ) )
$k = 1; if ($_SESSION["num_st"] == "" || $_SESSION["num_st"][$num_starts-1]< time()) { // проверка, что в сессию не записаны данные и что эти данные не устарели. do { add_time2start($k); $k++; } while ($k < = $num_starts); sort($time_to_start, SORT_NUMERIC); $_SESSION["num_st"] = $time_to_start; }
Teraz musíme zabezpečiť, aby skript fungoval bez ohľadu na maximálny čas vykonávania nastavený serverom.
Princíp je:
1) Určite čas začiatku skriptu;
2) Stanovíme stanovené obmedzenie času vykonania.
3) Spustíme cyklus, v ktorom počítame aktuálny čas a vypočítame celkový čas spustenia skriptu, skontrolujeme aktuálny čas s hodnotami v poli časov spustenia a ak existuje zhoda, vykonáme zadané akcie (mám ich v súbore exec.php). Na spúšťanie súborov používame zásuvky.
4) Cyklus opakujte, kým sa doba behu skriptu nepriblíži maximálnej povolenej hodnote. Nastavil som - až kým nebude maximálny čas 5 sekúnd.
Takže... zvažujeme počiatočné údaje v čase:
$start_time = microtime(); // Zistite čas spustenia skriptu $start_array = explode(" ",$start_time); // Oddelené sekundy a milisekúnd $start_time = $start_array; // získanie času spustenia skriptu $max_exec = ini_get("max_execution_time"); //Získajte maximálny možný čas spustenia skriptu
V podstate cyklus. Komentáre v kóde.
Do( $nowtime = time(); // Aktuálny čas //// Ak je aktuálny čas v poli s časmi vykonania skriptu...... if (in_array($nowtime, $_SESSION["num_st"]) ) ( // Držíme sa súboru s hlavným obsahom akcií $http = fsockopen("test.ru",80); /// zároveň mu odovzdávame údaje o relácii a čas, kedy má work fputs($http, "GET http://test .ru/exec.php?".session_name()."=".session_id()."&nowtime=$nowtime HTTP/1.0\r\n"); fputs ($http, "Hostiteľ: test.ru\r\ n"); fputs($http, "\r\n"); fclose($http); ) //// vykonala zadanú akciu // Zistite aktuálny čas, aby ste skontrolovali, či chcete pokračovať v slučke alebo reštartovať $now_time = microtime( ); $now_array = explode(" ",$now_time); $now_time = $now_array; // odčítajte od aktuálneho času počiatočný počiatočný $exec_time = $now_time - $start_time+$exec_time; /// spomalenie na druhý spánok (1000000); // Zastavenie skriptu spusteného na pozadí, nenapadá ma iný spôsob, ak (file_exists("stop.txt")) skončí ; Overte čas chodu, ak do konca // operácie skriptu zostáva menej ako 5 sekúnd, ukončite cyklus. ) while($exec_time< ($max_exec - 5));
No, ak povolený čas skončí, dokončíme cyklus a bezpečne spustíme rovnaký skript iným procesom (určite sa stretneme s 5 sekundami)
// Spustite ten istý skript s novým procesom a ukončite aktuálny $http = fsockopen("test.ru",80); fputs($http, "GET http://test.ru/index.php?".session_name()."=".session_id()."&bu=$max_exec HTTP/1.0\r\n"); fputs($http, "Hostiteľ: test.ru\r\n"); fputs($http, "\r\n"); fclose($http);
Keď som všetko dokončil, bol som zmätený užitočnou aplikáciou ... Môžete ju použiť ako službu. Môže sledovať niečo v sieti a upozorniť vás napríklad poštou. A nepotrebujete žiadne crony.
Skript je stále možné optimalizovať – ešte nie je dokončený.
Mimochodom, to je to, od čoho som sa nemohol odtrhnúť - prehliadač musí byť stále otvorený, aby bolo možné skript na začiatku spustiť.
pred 8 rokmi
Ak sa chcete vyhnúť volaniu exit() vo FastCGI podľa komentárov nižšie, ale naozaj, pozitívne chcete ukončiť volanie vnorenej funkcie alebo zahrnúť, zvážte to spôsobom Python:
definujte výnimku s názvom `SystemExit', vyhoďte ju namiesto volania exit() a zachyťte ju v index.php s prázdnou obslužnou rutinou, aby ste dokončili vykonávanie skriptu čisto.
// súbor: index.php
class SystemExit rozširuje Exception()
skús (
/* kód kódu */
}
catch (SystemExit $e ) ( /* nerobiť nič */ )
// koniec súboru: index.php
// nejaká hlboko vnorená funkcia alebo súbor .php
Ak (SOME_EXIT_CONDITION)
hodiť nový SystemExit(); // namiesto exit()
?>
pred 10 rokmi
Jbezorg na gmail navrhol nasledovné:
header("Umiestnenie: /");
?>
Po odoslaní hlavičky `Location:" PHP hlavička _bude_ pokračovať v analýze a všetok kód pod volaním header() sa bude stále vykonávať. Namiesto toho použite:
If($_SERVER [ "SCRIPT_FILENAME" ] == __FILE__ )
{
header("Umiestnenie: /");
východ;
}
?>
pred 10 rokmi
To rich dot lovely at klikzltd dot co dot uk:
Použitie znaku „@“ pred hlavičkou() na potlačenie jej chyby a spoliehanie sa na chybu „hlavičky sú už odoslané“ sa mi zdá veľmi zlý nápad pri vytváraní akejkoľvek serióznej webovej stránky.
Toto *nie je* čistý spôsob, ako zabrániť priamemu volaniu súboru. Prinajmenšom to nie je bezpečná metóda, pretože sa spoliehate na prítomnosť výnimky odoslanej syntaktickým analyzátorom za behu.
Odporúčam použiť bežnejší spôsob, ako je definovanie konštanty alebo priradenie premennej ľubovoľnej hodnoty a kontrola jej prítomnosti v priloženom skripte, napríklad:
v index.php:
define("INDEX" , true );
?>
vo vašom priloženom súbore:
ak (! definované("INDEX"))(
zomrieť ( "Tento skript nemôžete zavolať priamo!");
}
?>
B.R.
pred 4 rokmi
Vedľajšia poznámka k použitiu exit s konečne: ak opustíte niekde v bloku pokusu, nakoniec sa nevykoná. To nemôže znieť jasne: napríklad v jazyku Java nikdy nevydáte exit, aspoň návrat vo svojom radič, v PHP sa namiesto toho môžete ocitnúť pri opustení metódy ovládača (napr. v prípade, že zadáte presmerovanie).
Tu nasleduje POC:
echo "konecne testovanie s ukončením\n" ;
skús (
echo "Skúšam, končím\n" ;
východ;
) catch (Výnimka $e ) (
echo "chytit\n" ;
) konečne (
echo "konečne\n" ;
}
echo "Na konci\n" ;
?>
Toto vytlačí:
testovanie konečne vtip exit
V pokuse, výstup
pred 1 rokom
>> Funkcie vypnutia a deštruktory objektov sa vykonajú vždy, aj keď sa zavolá exit.
Je nepravdivé, ak zavoláte exit do deštruktora.
normálny výstup:
trieda A
{
{
echo "bye A\n" ;
}
}
trieda B
{
verejná funkcia __destruct()
{
echo "bye B\n" ;
}
}
$a = nové A ;
$b = nové B ;
východ;
//Výkon:
// ahoj B
// ahoj A
?>
// Výstup do deštruktora:
trieda A
{
verejná funkcia __destruct()
{
echo "bye A\n" ;
}
}
trieda B
{
verejná funkcia __destruct()
{
echo "bye B\n" ;
východ;
}
}
$a = nové A ;
$b = nové B ;
//Výkon:
// ahoj B
?>
pred 17 rokmi
Ak používate šablóny s mnohými zahrnutiami, potom exit() ukončí váš skript a vaša šablóna sa nedokončí (č,