PHP varsayılan hata işleme çok basittir. dosya adı, satır numarası ve hatayı açıklayan bir mesaj ile bir hata mesajı tarayıcıya gönderilir.
PHP Hata İşleme
komut dosyalarını ve web uygulamaları oluştururken, hata işleme önemli bir parçasıdır. kodunuzu hata denetimi kodunu içermiyorsa, programınız çok profesyonelce bakmak olabilir ve güvenlik risklerine açık olabilir.
Bu öğretici PHP yöntemleri kontrol En yaygın hata bazıları bulunur.
Şimdi farklı hata ayıklama yöntemlerini gösterecektir:
- Basit " die() " ifadeleri
- Özel hata ve hata tetikleyiciler
- Hata raporlama
Temel hata ele alma: kullanma die() işlev
İlk örnek, bir metin dosyasını açan bir script gösterir:
<?php
$file=fopen("welcome.txt","r");
?>
Dosya yoksa böyle bir hata alabilirsiniz:
Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2
yukarıdaki gibi bir hata mesajı alıyorum kullanıcıyı engellemek için, biz erişmeye çalışmadan önce dosyanın var olup olmadığını test:
<?php
if(!file_exists("welcome.txt")) {
die("File not found");
}
else {
$file=fopen("welcome.txt","r");
}
?>
Şimdi dosya Böyle bir hata alıyorum yoksa:
File not found
Bu hatanın üzerine senaryo durdurmak için basit bir hata işleme mekanizmasını kullanması nedeniyle Yukarıdaki kod, önceki kodundan daha verimlidir.
Ancak, sadece senaryoyu durdurma her zaman gitmek doğru yol değildir. en hataların işlenmesine yönelik alternatif PHP fonksiyonları bir göz atalım.
Özel bir Error Handler oluşturma
özel bir hata işleyicisi oluşturma oldukça basit. Biz sadece bir hata PHP oluştuğunda çağrılabilir özel bir işlev oluşturun.
Bu fonksiyon iki parametre (hata seviyesi ve hata mesajı) az kullanmak gerekir ama beş parametrelere kadar kabul edebilir (optionally: file, line-number, and the error context) :
Sözdizimi
error_function(error_level,error_message,
error_file,error_line,error_context)
Parametre | Açıklama |
---|---|
error_level | Gereklidir. Kullanıcı tanımlı hata için hata raporu düzeyini belirtir. Bir değer sayı olmalıdır. olası hata raporu düzeyleri için aşağıdaki tabloya bakın |
error_message | Gereklidir. Kullanıcı tanımlı hata için hata mesajı belirtir |
error_file | İsteğe bağlı. hatanın oluştuğu dosya adını belirtir |
error_line | İsteğe bağlı. hatanın oluştuğu satır numarasını belirtir |
error_context | İsteğe bağlı. hata oluştuğunda kullanım sırasında bir bütün değerleri içeren bir dizi, ve değerleri belirler |
Rapor seviyelerini Hata
Bu hata raporu seviyeleri kullanıcı tanımlı hata işleyicisi için kullanılabilecek hata farklı türleri şunlardır:
değer | sabit | Açıklama |
---|---|---|
2 | E_WARNING | Ölümcül olmayan çalışma zamanı hataları. script Yürütme durduruldu edilmez |
8 | E_NOTICE | Çalışma zamanı fark eder. senaryo bir hata olabilir bir şey buldum ama normalde bir komut dosyası çalıştırılırken da olabilirdi |
256 | E_USER_ERROR | Ölümcül kullanıcı tarafından oluşturulan hata. Bu PHP fonksiyonu kullanılarak programcı tarafından belirlenen E_ERROR gibidir trigger_error() |
512 | E_USER_WARNING | Ölümcül olmayan kullanıcılar tarafından oluşturulan uyarı. Bu PHP fonksiyonu kullanılarak programcı tarafından belirlenen E_WARNING gibidir trigger_error() |
1024 | E_USER_NOTICE | haber Kullanıcı tarafından oluşturulan. Bu PHP fonksiyonu kullanılarak programcı tarafından belirlenen E_NOTICE gibidir trigger_error() |
4096 | E_RECOVERABLE_ERROR | Yakalanabilir ölümcül hatası. Bu E_ERROR gibidir ancak bir kullanıcı tanımlı sap tarafından yakalanmış olabilir (see also set_error_handler() ) |
8191 | E_ALL | Tüm hatalar ve uyarılar (E_STRICT became a part of E_ALL in PHP 5.4) |
Şimdi hataları işlemek üzere bir fonksiyon oluşturmanızı sağlar:
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}
Yukarıdaki kod basit bir hata ele alma fonksiyonudur. o tetiklendiğinde, bu hata düzeyi ve bir hata mesajı alır. Daha sonra hata seviyesi ve mesajı verir ve senaryoyu sonlandırır.
Şimdi bir hata işleme fonksiyonu oluşturduk biz bunun tetiklediği gerekirken karar vermeniz gerekir.
Set hata işleyicisi
PHP için varsayılan hata işleyicisi hata işleyicisi inşa edilmiştir. Biz senaryo süresince varsayılan hata işleyicisi yukarıdaki işlevini yapacağız.
Sadece bazı hatalar için başvuruda hata işleyicisi, senaryo farklı şekillerde farklı hataları işleyebilir bu şekilde değiştirmek mümkündür. Ancak, bu örnekte tüm hatalar için bizim özel hata işleyicisi kullanacağız:
set_error_handler("customError");
Bizim özel fonksiyon tüm hataları işlemek istediğimiz için, set_error_handler() yalnızca bir parametre gerekli ikinci parametresinin hata seviyesini belirlemek için eklenebilir.
Örnek
yok çıkış değişkeni çalışarak hata işleyicisi Test:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
Yukarıdaki kod çıktısı şu şekilde olmalıdır:
Error: [8] Undefined variable: test
Bir hata Trigger
Senaryoya nerede kullanıcıları girdi verileri yasadışı bir giriş oluştuğunda hataları tetiklemek için yararlıdır. PHP, bu yapılır trigger_error() fonksiyonu.
Örnek
Bu örnekte bir hata oluşur "test" değişken daha büyük "1" :
<?php
$test=2;
if ($test>=1)
{
trigger_error("Value must be 1 or below");
}
?>
Yukarıdaki kod çıktısı şu şekilde olmalıdır:
Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6
Bir hata Senaryoya dilek ve ikinci bir parametre ekleyerek, hata seviyesi tetiklenir neler belirtebilirsiniz yerde tetiklenebilir.
Olası hata türleri:
- E_USER_ERROR - kullanıcı tarafından oluşturulan çalışma zamanı hatası. elde edilemez hatalar. script Yürütme durdurulur
- E_USER_WARNING - Sigara ölümcül kullanıcı tarafından oluşturulan çalışma zamanı uyarısı. script Yürütme durduruldu edilmez
- E_USER_NOTICE - Varsayılan. Kullanıcı tarafından oluşturulan çalışma zamanı bildirimi. senaryo bir hata olabilir bir şey buldum ama normalde bir komut dosyası çalıştırılırken da olabilirdi
Örnek
Bu örnekte bir E_USER_WARNING oluşur "test" değişken daha büyük "1" . Bir E_USER_WARNING oluşursa bizim özel hata işleyicisi kullanmak ve komut dosyasını sona erecek:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>=1) {
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
Yukarıdaki kod çıktısı şu şekilde olmalıdır:
Error: [512] Value must be 1 or below
Ending Script
Şimdi biz kendi hatalarını oluşturmak için öğrendim ve bunları tetiklemek için nasıl, hata günlüğü bir göz atalım.
Hata Günlüğü
Varsayılan olarak, PHP sunucunun günlüğü sistemi veya error_log yapılandırma php.ini dosyasında belirlenen şekline bağlı bir dosya, bir hata günlüğü gönderir. Kullanarak error_log() Eğer belirli bir dosya veya uzaktaki bir hedefe hata günlüklerini gönderebilirsiniz çalışır.
E-posta ile kendinize hata mesajları gönderme belirli hataları haberdar almanın iyi bir yolu olabilir.
E-Posta ile bir Hata Mesajı Gönder
Belirli bir hata oluşursa örnekte aşağıda biz bir hata mesajı içeren bir e-posta göndermek ve senaryoyu sona erecek:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"[email protected]","From: [email protected]");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>=1) {
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
Yukarıdaki kod çıktısı şu şekilde olmalıdır:
Error: [512] Value must be 1 or below
Webmaster has been notified
Ve yukarıdaki koddan alınan posta şuna benzer:
Error: [512] Value must be 1 or below
Bu, tüm hataları ile kullanılmamalıdır. Düzenli hatalar varsayılan PHP kaydı sistemi kullanılarak sunucuya oturum edilmelidir.