попробуйте оператор catch в PHP, где файл не загружается - PullRequest
32 голосов
/ 01 июня 2009

Я понимаю, что делают операторы try-catch, но, прочитав документацию на php.net, я не смогу реализовать ее в своем собственном коде. Мне нужен реальный пример, чтобы помочь мне понять.

Как я могу превратить этот пример в оператор try catch, если загрузка не удалась?

$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!";
}

Возможно, это не хороший пример для работы, но любая помощь будет признательна.

Ответы [ 6 ]

50 голосов
/ 01 июня 2009

Вы можете сделать это так.

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());
}

Это немного бессмысленно для приведенного выше примера, но вы должны понять. Обратите внимание, что вы можете выбросить исключение (я) из любого места (например, в функцию / метод, который вы вызываете с помощью try {}), и они будут распространяться вверх.

9 голосов
/ 01 июня 2009

Ну, если вы хотите использовать исключения, вы можете сделать что-то вроде:

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);
}

Я знаю, что это может выглядеть как раздувание, но вы можете вызвать метод из любой точки стека вызовов и перехватить исключение в любой точке.

7 голосов
/ 01 июня 2009

try-catch операторы используются для обработки исключений. Я не верю, что функция move_uploaded_files может выдавать и исключения, поэтому я считаю, что ваш код написан правильно. После звонка вы смотрите код возврата. Если значение равно false, вы прекращаете обработку, в противном случае вы получаете отчет об успехе.

3 голосов
/ 23 сентября 2009

Согласно аналогичному посту в PHPbug, только OO-код (объектно-ориентированный код) генерирует исключения. Это будет означать, что такие функции, как move_uploaded_file, не будут выдавать свои собственные исключения, но некоторый другой код будет.

2 голосов
/ 13 ноября 2011

Я нашел это полезным.

Хороший пример применения обработки исключений и попытки отлова - здесь .

0 голосов
/ 25 ноября 2013

Вы должны взглянуть на [Exception Best Practices в PHP 5.3] [1]

Обработка исключений в PHP не является новой особенностью. По следующей ссылке вы увидите две новые функции в PHP 5.3, основанные на исключениях. Первый - это вложенные исключения, а второй - новый набор типов исключений, предлагаемых расширением SPL (которое теперь является основным расширением среды выполнения PHP). Обе эти новые функции вошли в книгу лучших рекомендаций и заслуживают подробного изучения.

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

...