SiteVisorСайтвизор
cURL
PHP разработка

Отправка файлов с помощью PHP и cURL

Как отправить файл на сервер через PHP и cURL: рабочий пример POST-запроса с CURLFile, настройка опций curl_setopt и обработка ответа сервера.

Киселев Александр
Киселев Александр
Разработчик SiteVisor.Cloud25 сен 2023· 2 мин
Читать автора

Отправка файлов с использованием PHP и cURL - это распространенная задача при разработке веб-приложений. Например, это может потребоваться, когда вы хотите предоставить пользователям возможность загрузки файлов на ваш сервер. В этой статье мы рассмотрим, как легко отправить файл на сервер, используя PHP и библиотеку cURL.

Подготовка к отправке файла

Прежде чем начать отправку файла, убедитесь, что у вас есть файл, который вы хотите отправить, и путь к этому файлу на вашем сервере. В коде ниже предполагается, что у вас уже есть файл, который вы хотите отправить, и вы указали правильный путь к нему.

Использование cURL для отправки файла

Для отправки файла с использованием PHP и cURL, вам понадобится следующий код:

<?php

// URL обработчика на сервере, который примет файл
$uploadUrl = 'https://example.com/upload.php';

// Путь к файлу, который нужно отправить
$filePath = '/path/to/file.jpg';

// Определяем MIME-тип и имя файла
$mimeType = mime_content_type($filePath) ?: 'application/octet-stream';
$fileName = basename($filePath);

// Создаём объект CURLFile для корректной отправки файла
$cFile = new CURLFile($filePath, $mimeType, $fileName);

// Данные POST-запроса: поле 'file' содержит наш файл
$postData = [
    'file' => $cFile,
];

// Инициализируем сессию cURL
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $uploadUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

// Выполняем запрос
$response = curl_exec($ch);

// Проверяем на ошибки
if ($response === false) {
    echo 'Ошибка cURL: ' . curl_error($ch);
} else {
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo "HTTP-код ответа: {$httpCode}\n";
    echo "Ответ сервера: {$response}";
}

// Закрываем сессию cURL
curl_close($ch);

Важные моменты

  1. Замените $uploadUrl на фактический URL, на который вы хотите отправить файл.

  2. Замените $filePath на путь к файлу, который вы хотите отправить.

  3. Убедитесь, что на сервере, на который вы отправляете файл, есть обработчик, который будет принимать и сохранять файл.

  4. Обратите внимание, что функция curl_setopt используется для настройки параметров запроса cURL.

  5. После выполнения запроса, вы можете обработать ответ сервера. В приведенном примере ответ сервера будет выведен на экран.

Читайте также  Отличия PHP 7 от PHP 8 с примерами кода

Отправка файлов с помощью PHP и cURL - это мощный и удобный способ передачи данных между клиентом и сервером. Этот метод может быть полезен, когда вам необходимо реализовать функциональность загрузки файлов в ваши веб-приложения.


Не забудьте заменить URL и путь к файлу на фактические значения, соответствующие вашей задаче. Эта статья предоставляет базовое руководство по отправке файлов с помощью PHP и cURL и может быть адаптирована под ваши нужды.

Просмотров: 1212

Комментарии (4)

В
Валерий19 июл 2026

спасибо за пример именно с basename() для имени файла — раньше руками подставлял $_FILES['file']['name'] и получал двойное расширение при загрузке через прокси. и да, не забудьте CURLOPT_SSL_VERIFYPEER не выключать в проде, у автора код обрезан на этом моменте, но я как увидел совет в комментах на другом форуме выключить его "для теста" и оставить — сам чуть не сел в лужу так

В
Владимир9 июл 2026

словил баг: CURLFile брал mime_content_type, а он на пустом файле (0 байт) отдаёт false, и falseback на octet-stream норм, но само поле file на сервере приходило пустым. в итоге дело было не в curl, а в том что $filePath собирался неправильно из tmp_name после move_uploaded_file. в общем баг был не тут, но искал долго именно в этом коде

Ф
Фёдор16 янв 2026

а если файл больше 2-3 гигов? CURLOPT_POSTFIELDS с массивом вроде норм работает и с большими файлами, curl сам стримит через libcurl, но у меня на одном хостинге всё равно упиралось в memory_limit на стороне PHP при формировании массива postData. пришлось CURLOPT_INFILESIZE и put запрос городить вместо POST

Л
Лена13 сен 2025

почему просто не через Guzzle с multipart? curl_setopt портянка читается хуже, плюс там из коробки таймауты нормально настраиваются. хотя для одного файла наверное оверхед тянуть библиотеку ради этого

Похожие материалы

Проверьте это на своём сайте

Бесплатные инструменты SiteVisor разбирают индексацию, robots.txt, редиректы и микроразметку — без регистрации и настройки.