Когда дело доходит до загрузки файлов с помощью PHP, Guzzle — это популярная и мощная библиотека, которая может сделать этот процесс плавным и эффективным. Guzzle предоставляет широкий спектр методов и функций, упрощающих загрузку файлов. В этой статье мы рассмотрим несколько способов загрузки файлов с помощью Guzzle, а также несколько разговорных примеров и фрагментов кода.
- Базовая загрузка файла:
Для начала давайте рассмотрим простой пример загрузки файла с помощью Guzzle. Следующий фрагмент кода демонстрирует, как загрузить файл по заданному URL:
use GuzzleHttp\Client;
$client = new Client();
$response = $client->get('http://example.com/file.pdf');
$fileContent = $response->getBody()->getContents();
file_put_contents('/path/to/save/file.pdf', $fileContent);
В этом примере мы создаем новый клиент Guzzle, отправляем запрос GET на нужный URL-адрес и сохраняем содержимое тела ответа в локальный файл.
- Настройка заголовков запросов:
Guzzle позволяет настраивать заголовки запросов, которые могут быть полезны для аутентификации или других требований. Вот пример настройки пользовательских заголовков при загрузке файла:
use GuzzleHttp\Client;
$client = new Client();
$headers = [
'Authorization' => 'Bearer your-token',
'User-Agent' => 'MyDownloadApp/1.0'
];
$response = $client->get('http://example.com/file.pdf', ['headers' => $headers]);
// Save the file as before
В этом фрагменте кода мы определяем массив пользовательских заголовков и передаем его вместе с запросом. Это позволяет нам добавлять определенные заголовки, такие как токены авторизации или пользовательские агенты.
- Загрузка больших файлов частями:
При работе с большими файлами зачастую лучше загружать их небольшими частями, а не загружать в память весь файл. Guzzle предоставляет удобный способ сделать это с помощью параметра sink
и ресурса потока. Вот пример:
use GuzzleHttp\Client;
$client = new Client();
$stream = fopen('/path/to/save/file.pdf', 'w');
$client->get('http://example.com/large-file.pdf', ['sink' => $stream]);
fclose($stream);
В этом фрагменте кода мы используем параметр sink
, чтобы указать записываемый ресурс потока, в котором будет сохранен загруженный контент. Этот подход экономит память и подходит для загрузки больших файлов.
- Обработка хода загрузки:
Если вы хотите отображать пользователю ход загрузки или выполнять какие-либо действия в зависимости от прогресса, Guzzle предоставляет возможность сделать это. Вот пример отслеживания хода загрузки с помощью системы событий Guzzle:
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlHandler;
use GuzzleHttp\Middleware;
use Psr\Http\Message\RequestInterface;
$client = new Client();
$handlerStack = HandlerStack::create(new CurlHandler());
$handlerStack->push(Middleware::mapRequest(function (RequestInterface $request) {
$request = $request->withHeader('X-Progress-Enabled', 'true');
return $request;
}));
$client = $client->withHandler($handlerStack);
$client->get('http://example.com/file.pdf', [
'progress' => function ($downloadSize, $downloaded, $uploadSize, $uploaded) {
echo 'Downloaded: ' . $downloaded . ' bytes' . PHP_EOL;
}
]);
В этом примере мы используем систему событий Guzzle для отслеживания хода загрузки. Мы изменяем заголовки запросов, чтобы включить отслеживание прогресса, и определяем функцию обратного вызова для обработки обновлений прогресса.
Guzzle предоставляет гибкий и удобный способ загрузки файлов на PHP. В этой статье мы рассмотрели различные методы загрузки файлов с помощью Guzzle, включая базовую загрузку файлов, настройку заголовков запросов, загрузку больших файлов частями и отслеживание хода загрузки. Включение этих методов в ваши проекты позволит вам легко и эффективно управлять загрузкой файлов.
Не забудьте воспользоваться обширной документацией Guzzle и изучить дополнительные функции для дальнейшей оптимизации процессов загрузки файлов.