Исключение FileNotFoundException
Исключение FileNotFoundException выбрасывается в Laravel,
когда приложение пытается выполнить операцию с файлом,
который отсутствует в файловой системе. Это исключение
наследуется от базового класса RuntimeException
и входит в пространство имён Illuminate\Contracts\Filesystem.
Чаще всего оно возникает при использовании фасада Storage,
работе с локальными файлами или при попытке загрузки
ресурсов через вспомогательные функции Laravel.
Причины возникновения
Исключение выбрасывается в следующих случаях:
1. При попытке прочитать файл, которого нет по указанному пути.
2. При попытке удалить несуществующий файл.
3. При попытке получить размер или информацию о файле.
4. При попытке скопировать или переместить файл, который отсутствует.
Синтаксис
<?php
throw new FileNotFoundException($path, $code, $previous);
?>
Конструктор класса принимает три параметра:
- $path - путь к файлу, который не был найден (строка);
- $code - код ошибки (целое число, по умолчанию 0);
- $previous - предыдущее исключение для цепочки (опционально).
Пример
Давайте попробуем прочитать файл, который не существует,
с помощью фасада Storage:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function readFile()
{
$content = Storage::get('non_existent_file.txt');
echo $content;
}
}
?>
Результат выполнения кода:
"FileNotFoundException: File not found at path: non_existent_file.txt"
Пример
Попробуем удалить файл, которого нет в системе,
используя вспомогательную функцию unlink:
<?php
namespace App\Http\Controllers;
class FileController extends Controller
{
public function deleteFile()
{
$path = storage_path('app/missing_file.txt');
if (file_exists($path)) {
unlink($path);
echo "File deleted successfully";
} else {
echo "File not found at path: " . $path;
}
}
}
?>
Результат выполнения кода:
"File not found at path: /var/www/storage/app/missing_file.txt"
Пример
Обработка исключения с помощью конструкции try-catch
при работе с фасадом Storage:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
class FileController extends Controller
{
public function safeReadFile()
{
try {
$content = Storage::get('config/settings.json');
echo $content;
} catch (FileNotFoundException $e) {
echo "Error: File not found - " . $e->getPath();
}
}
}
?>
Результат выполнения кода:
"Error: File not found - config/settings.json"
Пример
Попытка получить размер файла, который не существует,
с помощью фасада Storage:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
class FileController extends Controller
{
public function getFileSize()
{
try {
$size = Storage::size('uploads/image.png');
echo "File size: " . $size . " bytes";
} catch (FileNotFoundException $e) {
echo "File not found: " . $e->getPath();
}
}
}
?>
Результат выполнения кода:
"File not found: uploads/image.png"
Смотрите также
-
исключение
Handler,
которое обрабатывает все исключения в приложении -
исключение
HttpException,
которое выбрасывается при HTTP-ошибках -
исключение
QueryException,
которое возникает при ошибках в запросах к базе данных -
исключение
ValidationException,
которое выбрасывается при ошибках валидации данных