CURL: Закачка файла методом POST

dmitrybelyakov

Новичок
CURL: Закачка файла методом POST

Добрый день,

Подскажите пожалуйста как можно и можно ли вообще осуществить закачку файла на удаленный сервер методом POST (не PUT) через библиотеку CURL.


Заранее спасибо.

P.S. Предвидя мнения о том, что закачка файла через curl "выглядит грязно" (как тут в одном топике написали), сообщаю - это нужно для того, чтобы автоматически загружать на удаленный сервер дамп mysql и синхронизировать две базы.
 

SiMM

Новичок
dmitrybelyakov, между прочим, если бы вы наконец сходили в ман по [m]CURL[/m]у, куда я вас уже посылал, вы бы давно нашли ответ на этот вопрос. К сожалению многие новички посыл в ман считают личным оскорблением и никогда не следуют этому совету, не считая нужным прочесть его и просмотреть примеры пользователей, среди которых, кстати, есть то, что вы искали.
 

dmitrybelyakov

Новичок
Originally posted by SiMM
dmitrybelyakov, между прочим, если бы вы наконец сходили в ман по [m]CURL[/m]у, куда я вас уже посылал, вы бы давно нашли ответ на этот вопрос. К сожалению многие новички посыл в ман считают личным оскорблением и никогда не следуют этому совету, не считая нужным прочесть его и просмотреть примеры пользователей, среди которых, кстати, есть то, что вы искали.
А почему вы решили что я ман не читал? Я его уже в доль и поперек перечитал. И все способы перепробовал. Я именно с мануала и начал.

Может вместо того, чтобы в очередной раз меня посылать в ман скажете хотябы - это вообще возможно? Может я зря бьюсь... ночами там не сплю, понимаш...


Могу несколько вариантов кода привести, которые не работают. И с PUT-методом тоже нифига не получается. Все по ману.

--
С уважением.

-~{}~ 24.10.04 21:45:

Мне с CURL не разобраться никак, а вы про репликацию...
 

SiMM

Новичок
Автор оригинала: dmitrybelyakov
А почему вы решили что я ман не читал? Я его уже в доль и поперек перечитал. И все способы перепробовал. Я именно с мануала и начал.
Потому что пример, данный gordon_e_rouse at yahoo dot com dot au 09-Sep-2004 05:08 вполне работает. Если он у вас не заработал, то скрипт должен был написать причины. И вообще, когда говорят, что пробовали, обычно показывают, как - это позволяет хотя бы указать на совершённые ошибки, а не гадать на кофейной гуще.
 

dmitrybelyakov

Новичок
Originally posted by SiMM
Потому что пример, данный gordon_e_rouse at yahoo dot com dot au 09-Sep-2004 05:08 вполне работает. Если он у вас не заработал, то скрипт должен был написать причины. И вообще, когда говорят, что пробовали, обычно показывают, как - это позволяет хотя бы указать на совершённые ошибки, а не гадать на кофейной гуще.
Дело в том, что у меня ман в CHM там никакого гордона нет.
Сейчас на сайт схожу. Спасибо типа за намек.

А код, который не работал вот:

Сервер #1

PHP:
//$file - адрес файла
//$fileResource - ресурс

$ch = curl_init("http://service/recieveSQL.php"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_INFILE, $fileResource);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));
$postResult = curl_exec($ch);
curl_close($ch);
Сервер #2
PHP:
$putdata=fopen("php://stdin", "r");
$fp=fopen("temp/temporary.sql", "w");
while ($data = fread($putdata, 1024)) fwrite($fp, $data);
fclose($fp);
fclose($putdata);
executeSQL("temporary.sql");
unlink("temp/temporary.sql");

Все по ману. Это хотя я PUT пробовал, но тем не менее с POST'ом тоже ничего не получается.

--
С уважением.
 

SiMM

Новичок
Автор оригинала: dmitrybelyakov
Дело в том, что у меня ман в CHM там никакого гордона нет.
Как ты думаешь, чья это проблема?
Сейчас на сайт схожу.
А ссылку я по твоему для кого размещал?
PHP:
ini_set('display_errors',1);
error_reporting(E_ALL);
if (count($_FILES)){
  echo '<pre>';
  print_r($_FILES);
  echo '</pre>';
  return;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME'] );
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file'=>'@'.$_SERVER['SCRIPT_FILENAME']) );
curl_exec( $ch );
Запускай в браузере и убеждайся, что всё работает.
 

dmitrybelyakov

Новичок
благодарю

Запускай в браузере и убеждайся, что всё работает. [/B]
Не заработал у меня гордона код... ума не приложу в чем дело... а за ваш код спасибо. все работает.

Вот, если интересно код который не работал. Все по копи-пэйсту взято и нифига.

Отправляющий
PHP:
$postData = array("file"=>'@test.txt');
//simulates <input type="file" name="file_name">
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );        
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POST, 1 );
//seems no need to tell it enctype='multipart/data' it already knows
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec( $ch ); 
echo $response;
//where test.txt is a file in the same directory!

Принимающий
PHP:
//Проверено на multipart-форме. Все работает. Хотя, в общем, это и так видно
$file=$_FILES['file'];
$target="$_SERVER[DOCUMENT_ROOT]/service/temporary/sql.sql";
move_uploaded_file($file['tmp_name'], $target);

Как-то так. Мне принципиально итересно, т.к. это у меня две недели отняло почти. Даже на свиданье вчера не пошел.

--
С уважением.
 

fixxxer

К.О.
Партнер клуба
>Даже на свиданье вчера не пошел.
А вот это зря :)
 

SiMM

Новичок
Re: благодарю

Автор оригинала: dmitrybelyakov
Не заработал у меня гордона код... ума не приложу в чем дело...
Вот, если интересно код который не работал. Все по копи-пэйсту взято и нифига.
К файлу test.txt, если он вообще существовал, имело смысл попробовать прописать полный путь, $url - тоже нужно было определить (из приведённого кода этого не видно, а пример Гордона в чистом виде, без доработки напильником под себя, работать и не должен - вобщем, PHP FAQ: Ничего не работает! Что делать???).
а за ваш код спасибо. все работает.
Ты главное разберись - как оно работает, а там уж переделаешь под себя, да и такого
на свиданье вчера не пошел.
не повторится.
Мне принципиально итересно, т.к. это у меня две недели отняло почти.
Так ты решил свою проблему или нет?
 

dmitrybelyakov

Новичок
Re: Re: благодарю

Originally posted by SiMM
К файлу test.txt, если он вообще существовал, имело смысл попробовать прописать полный путь, $url - тоже нужно было определить (из приведённого кода этого не видно, а пример Гордона в чистом виде, без доработки напильником под себя, работать и не должен - вобщем, PHP FAQ: Ничего не работает! Что делать???).Ты главное разберись - как оно работает, а там уж переделаешь под себя, да и такогоне повторится.Так ты решил свою проблему или нет?
Да, разумеется там был и $url и файл необходимый. И полный путь пробовал прописывать.

А проблему решил - спасибо за код. Разобраться было не сложно, просто я не понимаю почему это не работало раньше.
 
Сверху