En son web geliştirme öğreticiler
 

PHP Hata işleme


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.