Загрузка файлов на сервер с помощью CURL

Для одного из проектов нужно было загрузить файлы на сервер, с использованием CURL.

Делается это так:

$ch = curl_init();

$data = array('image' => '@{$full_path_file}'); //полный путь до файла

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);

На локальном сервере работало на ура, но когда я залил на сервер клиента, все перестала работать.

Проблемы была в том, что переменная $_FILES отдавала

Array
(
    [image] => Array
        (
            [name] => 1308074391.jpg
            [type] => application/octet-stream
            [tmp_name] => /tmp/phpslor8l
            [error] => 0
            [size] => 33173
        )

)

вместо ожидаемого

Array
(
    [image] => Array
        (
            [name] => 1308074391.jpg
            [type] => image/jpeg
            [tmp_name] => /tmp/phpslor8l
            [error] => 0
            [size] => 33173
        )

)

Причина такого странного поведения заключалось в том что у клиента на хостинге перед Apache стоял Nginx, вот он и портил все.

Долгое гугление привело меня к единственно верному решению

$ch = curl_init();

$data = array('image' => '@{$full_path_file};type=image/jpeg'); //полный путь до файла

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);

Комментариев: 1 на "Загрузка файлов на сервер с помощью CURL"

  1. Alexey says:

    Пасибо большое, я еще пару месяцов назад отказался от curl, теперь придется переделать!
    Еще расз сенкс!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>