[Решено]Как правильно сохранить изображение переданное при помощи CURL?

zey_ser

Новичок
Добрый день! При записи изображения, изображение сохраняется с размером = 0. При открытии изображения получаю
Ошибка интерпретации файла изображения формата JPEG (Improper call to JPEG library in state 200)
Пробовал и через file_put_contents и через fwrite, результат одинаков. Подскажите как быть!

Файл curl_file2.php
PHP:
$file = 'import_files_e3f04115-f54b-11de-bbf6-001d60b9486d_845b0960-b6ed-11e6-80f9-000c298f88bd.jpeg';

$image = imageupload($file, 'key', 'd41d8cd98f00b204e9800998ecf8427e');

echo var_dump(json_decode($image, true));
var_dump($image);

function imageupload($file, $name, $pass) {

    $data = array('name' => 'ff', 'file' => '@/var/www/zooapi/export/files/' . $file);

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "http://test/curl_file.php");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // Для загрузки на php > 5.5
    if (PHP_VERSION_ID > 505000) {
        curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
    }
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_COOKIE, "$name=$pass");

    if (curl_errno($ch))
    {
        // moving to display page to display curl errors
        $response[] = curl_errno($ch) ;
        $response[] = curl_error($ch);
    }
    else
    {
        //getting response from server
        $response = curl_exec($ch);

        curl_close($ch);
    }
    return $response;
}
Файл curl_file.php
PHP:
if ($_SERVER['REQUEST_METHOD'] == "POST") {

    $json = array();
    $data = file_get_contents("php://input");
    $uplod_file = '/var/www/test/' . $_FILES['file']['name'];
    
    // file_put_contents($uplod_file, $data);

    if ($fp = fopen($uplod_file, "wb")) {
        $result = fwrite($fp, $data);
        if ($result === strlen($data)) {
            chmod($uplod_file , 0664);
        }
        else {
            $json['error'][] = 'Данные';
        }
    } else {
        $json['error'][] = 'Открытие';
    }
    
    if (empty($json)) $json['success'] = 'Успено';
    
    echo json_encode($json);
}
 

AnrDaemon

Продвинутый новичок
CURLOPT_PUT, если вот так сильно хочется читать из php://input
Либо не морочь нам тут мозги и работай с POST как все.
 
Последнее редактирование:

antson

Новичок
Партнер клуба
в получателе добавь print_r($_FILES);
все дальше должно работать как будто файл аплоадил с формы в броузере
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
offtop: а можно ли методом PUT передать файл в 8-битной кодировке, без конвертации в base64? с бинарным нулем в содержимом файла, конечно
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
PUT это именно RAW body, всегда. Тело никак не интерпретируется.
 

fixxxer

К.О.
Партнер клуба
конечно, можно, webdav upload так и работает

можно и post-ом, на самом деле, с соответствующим content-type, но это уже из области извращений
 
Сверху