PHP komut dosyasının yürütülmesini durdurur ve biçimlendirilmiş bir HTML mesajı görüntüler.
Temel PHP işlevi die () 'nin bir benzeri. Aradaki fark, wp_die () 'nin HTML formatlı bir hata sayfası vermesidir. PHP'yi tamamen kapatmanız gerektiğinde bu işlevi kullanmanız önerilir. Bu özelliği sık kullanmanız önerilmez - kullanıcılara hata göstermemeye çalışın.
İadeler
Hiçbir şey döndürmez, ancak PHP'yi sonlandırır.
Kullanma
wp_die ($ mesaj, $ başlık, $ değişken); $ mesaj (karışık) Bir hata mesajı veya eksiksiz bir WP_Error nesnesi.Varsayılan: "" $ başlık (dize / dizi / sayı / nesne / mantıksal) Hata başlığı. WP_Error nesnesini kullanırsanız, başlık $ data ["title"] 'dan alınacaktır, bu parametre önceden kendiniz için değiştirilebilir.
Varsayılan: "" $ args (dize / dizi)
Davranışı kontrol eden çeşitli argümanlar.
Varsayılan: hayır
- metin yönü (hat)
Metin yönü: ltr (soldan sağa) veya rtl (sağdan sola).
Varsayılan: "ltr"
tepki (numara)
HTTP durum kodu. 500 - dahili sunucu hatası. Bütün liste.
Varsayılan: 500
back_link (mantıklı)
Önceki sayfaya geri bağlantı görüntülenip görüntülenmeyeceği.
Varsayılan: yanlış
Örnekleri
# 1. Kullanım gösterimi
Wp_die () işlevini kullanarak, şu anda $ post global değişkeninde ne olduğunu görelim:
Add_filter ("body_class", "add_body_class_cb"); function add_body_class_cb ($ sınıflar) (global $ post; wp_die ("
". var_export ($ post, true).""); }
# 2. Bir wp_die bloğunun stilini belirleme
Sitede bu bloğun tasarımını değiştirmeniz gerekirse, wp_die_handler kancasını kullanabilirsiniz:
500); $ r \u003d wp_parse_args ($ değiştirgeler, $ varsayılanlar); $ have_gettext \u003d function_exists ("__"); if (function_exists ("is_wp_error") && is_wp_error ($ mesaj)) (if (empty ($ title)) ($ error_data \u003d $ message-\u003e get_error_data (); if (is_array ($ error_data) && isset ($ error_data [" title "])) $ title \u003d $ error_data [" title "];) $ error \u003d $ message-\u003e get_error_messages (); switch (count ($ error)) (case 0: $ message \u003d" "; break; case 1 : $ mesaj \u003d ""; ara; varsayılan: $ mesaj \u003d "
- \\ n \\ t \\ t
- ". katılmak (" \\ n \\ t \\ t
- ", $ hata)." \\ n \\ t
$ geri_metin
";) if (! did_action (" admin_head ")): if (! headers_sent ()) (status_header ($ r [" yanıt "]); nocache_headers (); başlık (" İçerik Türü: text / html; charset \u003d utf-8 ");) if (boş ($ title)) $ title \u003d $ have_gettext? __ (" WordPress ›Hata"): "WordPress› Hatası "; $ text_direction \u003d" ltr "; if (isset ($ r [ "text_direction"]) && "rtl" \u003d\u003d $ r ["text_direction"]) $ text_direction \u003d "rtl"; elseif (function_exists ("is_rtl") && is_rtl ()) $ text_direction \u003d "rtl";?\u003e >Kod wp ölmek: wp-includes / functions.php WP 5.2.2
$ args); ) elseif (is_int ($ title)) ($ args \u003d array ("response" \u003d\u003e $ title); $ title \u003d "";) if (wp_doing_ajax ()) (/ ** * WordPress uygulamasını sonlandırmak için geri aramayı filtreler. Ajax istekleri. * * @Since 3.4.0 * * @param çağrılabilir $ function Geri arama işlevi adı. * / $ Function \u003d apply_filters ("wp_die_ajax_handler", "_ajax_wp_die_handler");) elseif (wp_is_json_request ()) (/ ** * Filtreler JSON istekleri için WordPress yürütmesini sonlandırmak için geri arama. * * @since 5.1.0 * * @param çağrılabilir $ işlevi Geri arama işlevi adı. * / $ function \u003d apply_filters ("wp_die_json_handler", "_json_wp_die_handler");) elseif (wp_is_jsonp_request () ) (/ ** * JSONP istekleri için WordPress yürütmesini sonlandırmak için geri aramayı filtreler. * * @ 5.2.0'dan beri * * @param callable $ function Geri arama işlevi adı. * / $ Function \u003d apply_filters ("wp_die_jsonp_handler", "_jsonp_wp_die_handler") ;) elseif (tanımlı ("XMLRPC_REQUEST") && XMLRPC_REQUEST) (/ ** * WordPress uygulamasını sonlandırmak için geri çağrıyı filtreler XML-RPC istekleri için n. * * @ 3.4.0'dan beri * * @param callable $ function Geri arama işlevi adı. * / $ function \u003d 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") &&&exists ) (/ ** * XML istekleri için WordPress yürütmesini sonlandırmak için geri aramayı filtreler. * * @ 5.2.0'dan beri * * @param çağrılabilir $ function Geri çağrı işlevi adı. * / $ Function \u003d apply_filters ("wp_die_xml_handler", "_xml_wp_die_handler") ;) else (/ ** * Ajax olmayan, JSON olmayan, XML olmayan tüm istekler için WordPress yürütmesini sonlandırmak için geri aramayı filtreler. * * @since 3.0.0 * * @param çağrılabilir $ function Geri arama işlevi adı. * / $ function \u003d apply_filters ("wp_die_handler", "_default_wp_die_handler");) call_user_func ($ fonksiyon, $ mesaj, $ başlık, $ değiştirgeler); )PHP'de bir arka plan programı yazmak konusunda beni şaşırttılar. Şunlar. belirli eylemleri belirli sayıda saat içinde, rastgele bir zamanda (her zaman rastgele) ve tüm bunları cron "a kullanmadan gerçekleştirecek bir betik.
Ondan önce hiç rahatsız etmedim, ama sonra görevi ayarladıktan sonra, php betiğinin tarayıcı tarafından çağrılması gerektiğini düşünmeye başladım ... peki, görev ayarlandı, gerçekleştirilmesi gerekiyor.
İlk düşüncem, komut dosyası yürütme zaman sınırını devre dışı bırakmaktır. Ev sahibi tarafından yasaklanmıştır.
İkinci düşünce, ajax isteğinin periyodik olarak javascript ile (en az saniyede bir) tekrarlanmasıdır. - mümkün değil (müşterinin isteği).
Aslında, tarayıcının açık olmaması ve tacın kullanılmaması gerektiği ve komut dosyasının süresiz olarak kullanıcıdan bağımsız olarak çalışması gerektiği ortaya çıktı. Doğal olarak, sistemi minimumda yüklemelidir.
1. Bir paket sigara, gece, google, dock'lar, kitaplar, kılavuzlar….
git 1 ...
Çıktıda:
Görev 1:
Belirtilen sayı ve saat sayısına dayalı olarak bir komut dosyası yürütme süreleri oluşturucu uygulayın. Bu saatleri bir yerde saklayın.
Task_2:
Tarayıcıyı kapattıktan sonra çalışın
Task_3:
Komut dosyası yürütme süresi sınırı dolduktan sonra çökme
Görev_4:
Doğru zamanda bazı eylemler gerçekleştirin.
Yani…
İlk verileri yapılandırmaya yazıyoruz:
Session_start (); // Oturumu başlat $ num_starts \u003d 120; // Belirli bir süre içinde başlatılan komut dosyası sayısı $ saat \u003d 1; // Betiği $ num_starts kez çalıştırmanız gereken saat sayısı. $ time_sec \u003d $ saat * 3600; // Başlangıç \u200b\u200bdöngüsündeki saniye sayısı $ time_to_start \u003d array (); // Aslında, başlangıç \u200b\u200bzamanlarına sahip bir dizi ignore_user_abort (1); // Bağlantısı kesilen tarayıcı bağlantısını yoksay
Ardından, başlatma zamanlarını oluşturmamıza yardımcı olacak bir işlev yazıyoruz.
İçinde 0'dan orijinal aralıktaki saniye sayısına kadar rastgele bir sayı üretiriz.
/ ****** * @desc Başlatma arasındaki aralığı oluşturun. * / function add_time2start () (global $ zaman_sec, $ zaman_başlangıç; $ yeni_saat \u003d zaman () + rand (0, $ zaman_sec); if (! in_array ($ yeni_saat, $ zaman_başlangıç)) (// Dizide böyle bir zaman yoksa - $ time_to_start \u003d $ new_time;) add_time2start (); // Eğer böyle bir zaman zaten varsa, onu yeniden oluştururuz.))
$ k \u003d 1; eğer ($ _SESSION ["num_st"] \u003d\u003d "" || $ _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; }
Şimdi, sunucu tarafından belirlenen maksimum yürütme süresine bakılmaksızın betiği çalıştırmamız gerekiyor.
Prensip aşağıdaki gibidir:
1) Komut dosyasının başlangıç \u200b\u200bzamanını belirleyin;
2) Yürütme süresi için ayarlanan sınırı belirleyin.
3) İçinde mevcut zamanı saydığımız ve betiğin toplam çalışma süresini hesapladığımız döngüyü başlatıyoruz, başlangıç \u200b\u200bzamanı dizisindeki değerlerle geçerli zamanı kontrol ediyoruz ve bir eşleşme varsa, belirtilen eylemleri gerçekleştiriyoruz (bunları exec.php dosyasında var). Dosyaları çalıştırmak için soketler kullanıyoruz.
4) Komut dosyasının çalışma süresi izin verilen maksimum değere yaklaşana kadar döngüyü tekrarlayın. Ben koydum - maksimum süre 5 saniye olana kadar.
Yani ... ilk verileri zamana göre hesaplıyoruz:
$ başlangıç_süresi \u003d mikrozaman (); // Betiğin başlangıç \u200b\u200bzamanını bulun $ start_array \u003d explode ("", $ start_time); // Saniyeleri ve milisaniyeleri ayırın $ start_time \u003d $ start_array; // komut dosyasının başlangıç \u200b\u200bzamanını al $ max_exec \u003d ini_get ("max_execution_time"); // Betiğin mümkün olan maksimum çalışma süresini alın
Aslında döngü. Koddaki yorumlar.
Do ($ nowtime \u003d time (); // Geçerli saat //// Geçerli saat, komut dosyası yürütme sürelerini içeren dizide ise ...... if (in_array ($ nowtime, $ _SESSION ["num_st"])) ( // Bir soket kullanarak, $ http \u003d fsockopen ("test.ru", 80); /// eylemlerinin ana içeriğine sahip dosyaya yapışırız, aynı zamanda oturum verilerini ve fputs'u ($ http, "GET http: // test) .ru / exec.php? ". session_name ()." \u003d ". session_id ()." & nowtime \u003d $ nowtime HTTP / 1.0 \\ r \\ n "); fputs ($ http," Host: test.ru \\ r \\ ); $ now_array \u003d explode ("", $ now_time); $ now_time \u003d $ now_array; // başlangıçtaki $ exec_time \u003d $ now_time - $ start_time + $ exec_time; /// ikinci bir usleep için yavaşlama (1000000); // Komut dosyasının arka planda çalışmasını durdurun. Başka bir yol bulamadım. If (file_exists ("stop.txt")) exit; // Pr Çalışma süresini kontrol ediyoruz, betiğin sonuna kadar 5 saniyeden az kalırsa // döngüyü sonlandırıyoruz. ) while ($ exec_time< ($max_exec - 5));
İzin verilen süre sona eriyorsa, döngüyü sonlandırır ve aynı betiği diğer işlemlerle güvenli bir şekilde başlatırız (sadece 5 saniye içinde tutacağız)
// Aynı betiği yeni bir işlemle çalıştırın ve geçerli olandan çıkın $ http \u003d fsockopen ("test.ru", 80); fputs ($ http, "GET http://test.ru/index.php?".session_name()."\u003d".session_id()."&bu\u003d$max_exec HTTP / 1.0 \\ r \\ n"); fputs ($ http, "Ana Bilgisayar: test.ru \\ r \\ n"); fputs ($ http, "\\ r \\ n"); fclose ($ http);
Her şeyi yazmayı bitirdiğimde, kullanışlı uygulaması beni şaşırttı ... Hizmet olarak kullanabilirsiniz. Ağdaki bir şeyi izleyebilir ve size örneğin posta yoluyla bildirimde bulunabilir. Ve herhangi bir cron'a ihtiyacınız yok.
Komut dosyası hala optimize edilebilir - revize edilmemiştir.
Bu arada, kendimi bundan alıkoyamadığım şey de bu - betiği başlangıçta çalıştırmak için tarayıcının hala açılması gerekiyor.
8 yıl önce
FastCGI'da aşağıdaki yorumlara göre exit () 'i çağırmaktan kaçınmak, ancak gerçekten, olumlu bir şekilde iç içe geçmiş işlev çağrısından veya dahil etmekten temiz bir şekilde çıkmak istiyorsanız, bunu Python yolu ile yapmayı düşünün:
systemExit adında bir istisna tanımlayın, exit () 'yi çağırmak yerine onu atın ve komut dosyasının çalışmasını temiz bir şekilde bitirmek için index.php'de boş bir eylemciyle yakalayın.
// dosya: index.php
sınıf SystemExit Exception'ı () genişletir
deneyin (
/ * kod kodu * /
}
catch (SystemExit $ e) (/ * hiçbir şey yapma * /)
// dosyanın sonu: index.php
// derinlemesine iç içe geçmiş bir işlev veya .php dosyası
Eğer (SOME_EXIT_CONDITION)
yeni SystemExit () atar; // exit () yerine
?>
10 yıl önce
Gmail'deki Jbezorg şunları önerdi:
başlık ("Konum: /");
?>
"Location:" başlığını gönderdikten sonra PHP _will_ ayrıştırmaya devam edecek ve header () çağrısının altındaki tüm kod çalıştırılacaktır. Bunun yerine şunu kullanın:
Eğer ($ _ SERVER ["SCRIPT_FILENAME"] \u003d\u003d __FILE__)
{
başlık ("Konum: /");
çıkış;
}
?>
10 yıl önce
Klikzltd dot co dot uk şirketinde rich dot lovely için:
Hatasını bastırmak için header () 'dan önce bir "@" kullanmak ve "zaten gönderilen başlıkları" hatasına güvenmek, ciddi bir web sitesi oluştururken bana çok kötü bir fikir gibi geliyor.
Bu, bir dosyanın doğrudan çağrılmasını önlemenin temiz bir yolu * değildir *. En azından, çalışma zamanında ayrıştırıcı tarafından gönderilen bir istisnanın varlığına güvendiğiniz için bu güvenli bir yöntem değildir.
Bir sabiti tanımlamak veya herhangi bir değere sahip bir değişkeni atamak için daha yaygın bir yol kullanmanızı ve dahil edilen komut dosyasında aşağıdaki gibi varlığını kontrol etmenizi öneririm:
index.php içinde:
tanımla ("INDEX", doğru);
?>
dahil dosyanızda:
eğer (! tanımlı ("INDEX")) (
ölmek ( "Bu betiği doğrudan arayamazsınız!");
}
?>
BR.
4 yıl önce
Exit ile birlikte exit kullanımı için bir yan not: try bloğunda bir yerden çıkarsanız, sonunda çalıştırılmayacaktır. Ses gelmiyor: örneğin Java'da hiçbir zaman çıkış yapmazsınız, en azından denetleyici; PHP'de bunun yerine kendinizi bir denetleyici yönteminden çıkarken bulabilirsiniz (örneğin bir yeniden yönlendirme yaptığınızda).
İOOY aşağıdaki gibidir:
echo "nihayet çıkışla test ediliyor \\ n";
deneyin (
echo "Denemede, çıkılıyor \\ n";
Çıkış;
) catch (İstisna $ e) (
echo "yakalandı \\ n";
) en sonunda (
echo "sonunda \\ n";
}
echo "Sonunda \\ n";
?>
Bu yazdıracak:
sonunda çıkışla test etmek
Denemede çıkılıyor
1 yıl önce
\u003e\u003e Kapatma işlevleri ve nesne yıkıcılar, çıkış çağrılsa bile her zaman yürütülür.
Çıkışı desctructor'a çağırırsanız yanlıştır.
Normal çıkış:
a sınıfı
{
{
echo "güle güle A \\ n";
}
}
b sınıfı
{
public function __destruct ()
{
echo "güle güle B \\ n";
}
}
$ a \u003d yeni A;
$ b \u003d yeni B;
çıkış;
// Çıktı:
// güle güle B
// güle güle A
?>
// Açıklayıcıdan çıkın:
a sınıfı
{
public function __destruct ()
{
echo "güle güle A \\ n";
}
}
b sınıfı
{
public function __destruct ()
{
echo "güle güle B \\ n";
çıkış;
}
}
$ a \u003d yeni A;
$ b \u003d yeni B;
// Çıktı:
// güle güle B
?>
17 yıl önce
Çok sayıda içeren şablon kullanıyorsanız, exit () komut dosyasını sonlandıracak ve şablonunuz tamamlanmayacaktır (hayır,