fsockopen

tony2001

TeaM PHPClub
fsockopen

Повторяю свой вопрос:
не знает ли КТО-НИБУДЬ как через проксю заслать файл на удаленный сервер с локальной машины(логи и пароль на удаленном сервере вводить НАДО).
Я подозреваю, что делать это надо через fsockopen, но не знаю КАК.
Подскажите, плз!
 

antonio

Moderator
Команда форума
Можешь воспользоваться модулем CURL, о котором есть инфа в доке в резделе CURL functions, это будет проще, нежели мучить себя формированием заголовков и разборками с ними.
 

DiMA

php.spb.ru
Команда форума
прошу прокомментировать на русском, что делает пример из мана

<?php

$ch = curl_init ("http://www.php.net/");
$fp = fopen ("php_homepage.txt", "w");

curl_setopt ($ch, CURLOPT_FILE, $fp);
curl_setopt ($ch, CURLOPT_HEADER, 0);

curl_exec ($ch);
curl_close ($ch);
fclose ($fp);
?>

На вид, открыть сокет на 80 порт и загнать файл с заголовком.

Может вправду забить на сокеты можно? :)
 

tony2001

TeaM PHPClub
Ну, судя по комментарию на английском и параметру "w" - таки да, открывает соединение и загоняет туда файл.
Можно и забить на сокеты. НО!
Кто сказал, что с кУРЛом проще работать, чем с сокетами?
Я такого пока сказать не могу - вот поставлю себе сейчас 4.0.5 под Вин98 со встроенным кУРЛом - тогда буду выводы делать....

DiMA писал(а):
-------------------------------
прошу прокомментировать на русском, что делает пример из мана
На вид, открыть сокет на 80 порт и загнать файл с заголовком.
Может вправду забить на сокеты можно? :)
 

tony2001

TeaM PHPClub
хорошо висим! =(

да мне он тоже нравится !
особенно нравится как он вешает РНР.....
с включенным модулем РНР просто висит =((((((((((((((((((

че делать?
РНР качанный вчера с php4win....последняя версия....

SoftLV писал(а):
-------------------------------
А мне CURL понравился :) Буду изучать.
 

antonio

Moderator
Команда форума
Работает, даже если поставить как модуль апача, я теперь только так на видах и воркаю (php 4.0.4)
 

tony2001

TeaM PHPClub
не спорю. работает.

угу, работает.

вопрос только есть:
как указать ему использовать прокси для закачки файла?
(сначала я хотя-бы хочу _С_качать файл с удаленного сервера)
а то он либо пишет Error 500, либо показывает мне страничку нашего сайта (очень рад, конечно, но я ж не этого хотел ...)

great thanx to Antonio for REALLY GOOD working php-release =)
 

DiMA

php.spb.ru
Команда форума
пока вы тут ведете дискусскию, я бы давно все на сокетах написал. Делов то, блин, дольше объяснять:

$s=fsockopen("proxy.ru","3128")
fputs($s,"GET http://то.что.нужно/качнуть HTTP/1.0\nHOST: то.что.нужно\n\n");

а далее чтение как из файла до закрытия оного.
 

tony2001

TeaM PHPClub
елы-палы!

хе-хе!

надо не скачать, а ЗАКАЧАТЬ.

DiMA писал(а):
-------------------------------
пока вы тут ведете дискусскию, я бы давно все на сокетах написал. Делов то, блин, дольше объяснять:

$s=fsockopen("proxy.ru","3128")
fputs($s,"GET http://то.что.нужно/качнуть HTTP/1.0\nHOST: то.что.нужно\n\n");
 

tony2001

TeaM PHPClub
я его уже и так читал, и эдак (со вчерашнего дня)...
вроде все указываю, что надо...
а "описание" - это ты загнул! единственное, что там описано, что для этого надо CURLOPT_PROXY да CURLOPT_PROXYPORT указать.
Хоть бы рабочий пример привели!
Кстати, на родном кУРЛОвском сайте еще меньше написано про работу кУРЛА с РНР.



SoftLV писал(а):
-------------------------------
tony, на http://www.php.net/manual/en/function.curl-setopt.php есть описание. В том числе и того, как работать через прокси.
 

tony2001

TeaM PHPClub
контакт?! есть контакт!

полчаса помучился и стала работать Win32 версия кУРЛа в ехе-шнике.
в общем получилось заслать файл через командную строку =)

можно сделать вывод, что кУРЛ работает.

отсталось только то же реализовать на РНР =)
 

tony2001

TeaM PHPClub
кстати, если кому-нибудь надо, то могу обьяснить КАК я сделал это через ехе-шник под Вин98....

пишите....

пока буду разбираться с кУРЛом под РНР....
 

DJ Rabbit

Guest
Всегда пожалуйста - авторам двери открыты :)
 

tony2001

TeaM PHPClub
ну полный контакт! EXE for Win32

для exe-шника:
1. скачать архив под Вин32 на http://curl.haxx.se/
2. создать БАТник в директории кУРЛа (для удобства - можно, конечно, и прямо из командной строки).
3. в батнике написать следующее (все в одной строке, ессно):

curl
-T file_to_upload.xxx
-o file_for_result_output.xxx
-U PROXY_USER:pROXY_PW
-x proxy:8080
ftp://USER:[email protected]_to_upload_to.com:21

теперь построчно обьясню что мы написали:
"-T file_to_upload.xxx" - этот файл мы будем закачивать
"-o file_for_result_output.xxx" - в этот файл кУРЛ запишет результат закачки (обычно он выдает его на экран, но, согласитесь, удобней читать HTML через броузер)
"-U proxy_user:proxy_pw" - юзер и пароль от прокси (сюприз!!)
"-x proxy:8080" - использовать прокси с соответствующим портом (возможно порт у вас другой, попробуйте вообще убрать порт, он по умолчанию 1080)
"ftp://USER:[email protected]_to_upload_to.com:21" - юзер, пароль, урл сайта, на который будем закачивать (каталог сами меняйте) и ФТП-порт.

Юзайте. Про все возникшие ошибки читайте в "file_for_result_output.xxx" =)

tony2001
 

tony2001

TeaM PHPClub
ну полный контакт! cURL with PHP

Исходник скрипта для закачки кУРЛОМ по ФТП из-под Win32:

<?
set_time_limit(0);

dl("php_curl.dll"); //загрузим ДЛЛ-ку - по непонятным для меня причинам
//через РНР.ИНИ его загрузить не получается =)

$file = "upload.html"; // его и будем закачивать
$outfile = "out.htm"; // здесь смотреть результат (можно переделать так, чтобы
// результат выводился на экран)

$ch = curl_init (); // приступимс.... =)))
$fpin = fopen ($file, "r"); //открываем для загрузки
$fpout = fopen ($outfile, "w"); //открываем для записи результат загрузки

curl_setopt ($ch,CURLOPT_FILE,$fpout); // результат писать в $fpout
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // да!, писать результат
curl_setopt ($ch,CURLOPT_INFILE,$fpin); // закачивать $fpin
curl_setopt ($ch,CURLOPT_PROXYUSERPWD ,"proxy_user:proxy_pw"); // ясно
curl_setopt ($ch,CURLOPT_PROXY,"proxy:8080"); // ясно
curl_setopt ($ch,CURLOPT_UPLOAD,1); // мы будем аплоадить
curl_setopt ($ch,CURLOPT_INFILESIZE,filesize($file)); // может это и не
//обязательно, но просят указывать...
curl_setopt ($ch,CURLOPT_URL,"ftp://USER:[email protected]/".$file);
//урл с паролем и логином

curl_exec ($ch); //выполнить трансфер
curl_close ($ch); //закрыть соединение

fclose ($fpin); //закрыть файл
fclose ($fpout); //закрыть файл
?>

все.
у меня работает =)))))))
копайтесь, улучшайте =)

(c) 2001
tony2001
 
Сверху