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-проекта или разработка подобного функционала под задачу — напишите.

Обсудить задачу

PHP разработка Доработка PHP

Покупка готового скрипта joomla 3

или просто напишите в телеграмм https://t.me/webalan