Try catch в PHP, где файл не загружается
Я понимаю, что делают заявления 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!";
}
Это не может быть хорошим примером для работы, но любая помощь будет оценена.
Ответы
Ответ 1
Вы можете сделать это вот так.
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 {}), и они будут распространяться вверх.
Ответ 2
Ну, если вы хотите использовать исключения, вы можете сделать что-то вроде:
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);
}
Я знаю, что это может показаться раздутым - но вы можете вызвать метод из любой точки стека вызовов и поймать исключение в любой точке.
Ответ 3
Операторы try-catch
используются для обработки исключений. Я не считаю, что функция move_uploaded_files
может вызывать и исключение, поэтому я считаю, что код написан правильно. После вызова вы просматриваете код возврата. Если он ошибочен, вы завершаете обработку, иначе вы достигнете успеха в отчете.
Ответ 4
Согласно аналогичной записи в PHPbug, только код OO (Object-Oriented code) генерирует исключения. Это означало бы, что такие функции, как move_uploaded_file, не будут генерировать собственные исключения, но какой-то другой код будет.
Ответ 5
Я нашел этот полезный.
Хорошим примером применения обработки исключений и try catch является здесь.
Ответ 6
Вы должны взглянуть на [Исключительные рекомендации в PHP 5.3] [1]
Обработка исключений в PHP не является новой функцией на любом участке. В следующей ссылке вы увидите две новые функции в PHP 5.3, основанные на исключениях. Первый - вложенные исключения, а второй - новый набор типов исключений, предлагаемых расширением SPL (который теперь является основным расширением среды выполнения PHP). Обе эти новые функции нашли свой путь в книге лучших лучших практик и заслуживают подробного изучения.
http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3