Dosya karşıya değil PHP catch deyimini deneyin

6 Cevap php

Ben try-catch ifadeleri ne anlıyorum, ama php.net ilgili belgeleri okuma, benim kendi koduna birini uygulamak mümkün olmaz. Beni anlamak için gerçek bir örnek gerekir.

Yükleme başarılı olmadı olmadığını nasıl, bir try catch deyimi içine bu örneği açabilirsiniz?

$move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']);

if (!$move) {
    die ('File didn't upload');
} else {            
    //opens the uploaded file for extraction
    echo "Upload Complete!";
}

Bu çalışmak için iyi bir örnek olmayabilir, ancak herhangi bir yardım mutluluk duyacağız.

6 Cevap

Bunu böyle yapabilirdi.

try {
    //throw exception if can't move the file
    if (!move_uploaded_file( ... )) {
        throw new Exception('Could not move file');
    }

    //do some more things with the file which may also throw an exception
    //...

    //ok if got here
    echo "Upload Complete!";
} catch (Exception $e) {
    die ('File did not upload: ' . $e->getMessage());
}

Bu yukarıdaki örnek için biraz anlamsız olduğunu, ancak fikir almalısınız. (Eğer try {} withing aramak bir işlev / yöntem içinde örneğin) yerden istisna (ler) atabilir ve onlar yukarı yaymak unutmayın.

İstisnaları kullanmak istiyorsanız Peki, sizin gibi bir şey olabilir:

function handleUpload() {


    $move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']);

    if (!$move) {
       throw new Exception('File Didnt Upload');
    }

}

try {
   handleUpload();
   echo "File Uploaded Successfully";
} catch(Exception $ex) {
   die($ex->getMessage);
}

Ben bu kabartmak gibi görünebilir biliyorum - ama her yerde çağrı yığını gelen yöntemini çağırın, ve herhangi bir noktada istisnayı da yakalayabilir.

try-catch ifadeleri istisnalar işlemek için kullanılır. Ben gibi ben size kod yazılır doğru olduğunu düşünüyorum, fonksiyon move_uploaded_files atmak ve istisna olabilir inanmıyorum. Aramadan sonra, size dönüş kodu bakmak. False ise, aksi takdirde rapor başarı vardır, işleme bitirmek.

PHPbug benzer bir mesaja göre, sadece OO kod (Object-Oriented kod) istisnalarını atar. Böyle move_uploaded_file gibi işlevleri kendi istisnalar atmak olmaz, ancak diğer bazı kod olacak anlamına gelecektir.

I this yararlı buldu.

İyi bir istisna işleme uygulama örneği ve yakalamak şeyler deneyin here.

Sen [PHP 5.3 İstisna Best Practices] bir bakmak gerekir [1]

PHP istisna işleme herhangi bir streç tarafından yeni bir özellik değil. Aşağıdaki linkte, özel durumlar etrafında dayalı PHP 5.3 iki yeni özellikleri göreceksiniz. Ilk iç içe istisnalar ve ikinci (şimdi PHP zamanının bir çekirdek uzantısı) SPL uzantısı tarafından sunulan istisna tipleri yeni bir kümesidir. Bu yeni özelliklerin ikisini de en iyi uygulamaların kitabın içine kendi yolunu buldu ve ayrıntılı olarak incelenmesi gereken hak var.

http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3