PHP скрипт для автоматического скачивания файлов
- Показывать справа: 0
В веб-разработке часто возникают задачи, которые проще автоматизировать, чем выполнять вручную. Одна из таких задач — массовое скачивание файлов по списку ссылок.
Ниже приведен рабочий пример PHP-скрипта, который позволяет скачивать файлы по URL и сохранять их на сервере.
Зачем это нужно
- загрузка изображений и файлов
- обновление данных
- парсинг и агрегация контента
- автоматизация задач
PHP код для скачивания файлов
<?php
/**
* Функция для скачивания файла по URL и сохранения его в указанную директорию.
*
* @param string $url URL файла для скачивания.
* @param string $destinationDir Директория, куда будет сохранен файл.
* @return bool true в случае успешного скачивания, false в случае ошибки.
*/
function downloadFile($url, $destinationDir) {
// Извлекаем имя файла из URL
$fileName = basename($url);
$destinationPath = $destinationDir . '/' . $fileName;
// Проверяем, существует ли директория назначения, и создаем ее, если нет
if (!is_dir($destinationDir)) {
if (!mkdir($destinationDir, 0777, true)) {
echo "Ошибка: Не удалось создать директорию '{$destinationDir}'.\n";
return false;
}
}
// Открываем файл для записи
$fileHandle = fopen($destinationPath, 'w');
if ($fileHandle === false) {
echo "Ошибка: Не удалось открыть файл для записи '{$destinationPath}'.\n";
return false;
}
// Инициализируем cURL сессию
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fileHandle); // Сохраняем результат непосредственно в файл
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Следовать за перенаправлениями
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // Максимальное количество перенаправлений
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Отключаем проверку SSL сертификата (используйте с осторожностью)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Отключаем проверку SSL хоста (используйте с осторожностью)
// Выполняем запрос
$success = curl_exec($ch);
// Проверяем на ошибки cURL
if ($success === false) {
echo "Ошибка cURL при скачивании '{$url}': " . curl_error($ch) . "\n";
fclose($fileHandle);
unlink($destinationPath); // Удаляем частично скачанный файл
curl_close($ch);
return false;
}
// Получаем HTTP статус код
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode != 200) {
echo "Ошибка: Не удалось скачать файл '{$url}'. HTTP статус код: {$httpCode}\n";
fclose($fileHandle);
unlink($destinationPath); // Удаляем частично скачанный файл
curl_close($ch);
return false;
}
// Закрываем cURL сессию и файл
curl_close($ch);
fclose($fileHandle);
echo "Файл '{$fileName}' успешно скачан в '{$destinationPath}'.\n";
return true;
}
// Список ссылок на файлы
$urls = [
"https://example.com/file1.jpg",
"https://example.com/file2.jpg"
];
// Директория для сохранения файлов
$destinationDirectory = 'img2';
//Так можно без массива качать если ссылки похожие но разница только в числе
/*
$file = 'https://example.com/file{n}.jpg';
$max = 9;
for($i=1; $i<=$max; $i++)
{
$url = str_replace('{n}',$i,$file);
downloadFile($url, $destinationDirectory);
}
*/
// Проходим по каждой ссылке и скачиваем файл
foreach ($urls as $url) {
downloadFile($url, $destinationDirectory);
}
echo "Скачивание завершено.\n";
?>
Как работает скрипт
Скрипт использует cURL для загрузки файлов по URL и сохраняет их напрямую в файл на сервере.
Скрипт использует мощное расширение PHP — cURL — для выполнения HTTP-запросов.
Функция downloadFile() принимает URL файла и целевую директорию.
Она извлекает имя файла из URL, создает директорию, если она не существует, и затем использует cURL для скачивания содержимого файла напрямую в созданный локальный файл.
Важно отметить, что в скрипте для упрощения отключены проверки SSL-сертификатов (CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST).
- из URL берется имя файла
- создается папка, если её нет
- выполняется запрос через cURL
- проверяется HTTP статус
- при ошибке файл удаляется
Важно: в примере не включена строгая проверка SSL. В реальных проектах её лучше использовать.
Этот пример демонстрирует базовую функциональность. В проектах часто возникает необходимость в более сложной обработке: здесь может потребоваться добавить обработку различных типов ошибок, логирование, ограничение по размеру файлов, работу с аутентификацией или более сложные условия скачивания.
Где применяется
- парсеры и сбор данных
- интеграции с API
- загрузка товаров и изображений
- синхронизация файлов
Нужен подобный скрипт или доработка?
Если нужна доработка PHP-проекта или разработка подобного функционала под задачу — напишите.