Для одного из проектов нужно было загрузить файлы на сервер, с использованием 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);
Комментариев нет:
Отправить комментарий