Можно ли из сценария PHP отправить на другой сайт данные если изестно доменное имя и форма например на www.domen.com/page1.php ?
1) http://ru2.php.net/manual/ru/function.fsockopen.php 2) http://ru2.php.net/manual/ru/book.curl.php 3) С помощью POST-формы.
Короче говоря как организовать обмен между сценариями на разных доменах? Чтото похожее на web сервис? Типа скрипт на одном домене обращается к сервису на втором. Тот предоставляет ему необходимые данные, и первый продолжает работу?
PHP: <?php $fp = fsockopen("localhost", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET asd.php HTTP/1.1\r\n"; $out .= "Host:localhost \r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } ?> Вот написал. Создал asd.php PHP: <?php echo "Привет я эхо!"; ?> и получаю: Bad Request Your browser sent a request that this server could not understand.
вот все заголовки которые шлет мой фаер: Код (Text): GET /asd.php HTTP/1.1 Host: localhost:80 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive
Я рад, а мне как быть? Мне надо чтобы скрипт работал потом соединился с другим сервером, получил от него пару значений, и работал дальше...
Ура, вернулось: HTTP/1.1 200 OK Date: Thu, 08 May 2008 04:45:04 GMT Server: Apache/2.2.4 (Win32) PHP/5.2.3 X-Powered-By: PHP/5.2.3 Content-Length: 13 Connection: close Content-Type: text/html Привет я эхо! Только не понятно почему кроме "Привет я эхо!" остальное возвращает, можно это убрать как то?[/code][/php] Мда.. тупой вопрос, у меня ж в коде написано))) Кстате убираю вайл Привет я эхо уже не выводит?
Теперь пишу так: index.php Код (Text): <?php set_time_limit(0); $data = "login=mylogin&password=555555456"; $data_len = strlen($data); $fp = fsockopen("localhost", 80 , $errno, $errstr); if (!$fp) { echo "$errstr ($errno)</br>\n"; } else { $out = "POST /asd.php HTTP/1.1\r\n"; $out .= "Host:localhost:80 \r\n"; $out .= "Content-length: ".$data_len."\r\n"; $out .= "Connection: close\r\n\r\n"; $out .= $data; fwrite($fp, $out); fclose($fp); } ?> asd.php Код (Text): <?php echo "Привет я эхо!<br>"; echo "Переданные параметры: <br>"; echo "Метод GET: <br>"; foreach ($_GET as $key=>$val){ echo "$key : $val <br>"; } echo "Метод POST: <br>"; foreach ($_POST as $key=>$val){ echo "$key : $val <br>"; } ?> Выдает пустую страницу. В чем проблема, не пойму?
Кажись я начинаю понимать.... Я думал fsockopen пошлет запрос локалхосту, тот запустит asd.php и выдаст мне в броузер результат работы asd.php. А тут оказывается по умному))) Тоесть я правильно понимаю? fsockopen посылает запрос локалхосту, локалхость запускает asd.php и возвращает запрос вместе с результатами работы asd.php обратно в скрипт index.php ?
Кстате ктото хот читает то что я пишу? Отзовитесь!!! Вот пишу я: index.php PHP: <?php set_time_limit(0); $data = "?login=my_login&password=123"; $data_len = strlen($data); $fp = fsockopen("localhost", 80 , $errno, $errstr); if (!$fp) { echo "$errstr ($errno)</br>\n"; } else { $out = "POST /asd.php HTTP/1.1\r\n"; $out .= "Host:localhost \r\n"; $out .= "Content-length: ".$data_len."\r\n"; $out .= "Connection: close\r\n\r\n "; $out .= $data; fwrite($fp, $out); while (!feof($fp)){ $s .= fgets($fp,128); } //$result = fclose($fp); echo "$result $s"; } ?> asd.php PHP: <?php foreach ($_POST as $key=>$value){ echo "$key : $value"; } if (isset($_POST["login"]) && isset($_POST["password"])) { if (($_POST["login"]=="my_login") && ( $_POST["password"]==123)){ echo 0.12151; } } ?> Браузер показывает: HTTP/1.1 200 OK Date: Thu, 08 May 2008 09:56:19 GMT Server: Apache/2.2.4 (Win32) PHP/5.2.3 X-Powered-By: PHP/5.2.3 Content-Length: 0 Connection: close Content-Type: text/html Возникают такие вопросы: 1. Почему не отображается в бараузере 0.12151 и массив $_POST ? 2. Почему могу повесить сервер если ставлю в $s .= fgets($fp,1); параметр 1 .... тоесть его нужно варьировать от каких тоусловий? 3. Самый главный: Как мне убрать все то что пишет браузер запысывая в $result 0.12151. Надо через content type както, или просто от конца указателя отсчитывать.. тоже не удобно. если через content type то как именно? Заранее благодарю, сильно- сильно ))
Для начала у тебя неверно формируется пост данные для запроса в файле index.php, и соответственно ты не проходишь проверку по ифам в asd.php, поэтому пусто в ответе .... Во-вторых - обмен заголовками ОБЯЗАТЕЛЕН .. и от этого никуда не дется ... но вот смотри ты в своем файле определяешь заголовок 2-мя ентрами , но очевидно не понимаешь зачем ... стоит разобраться со стандартами передачи данных в протоколе http - без этого продолжать бесмысленно .... В третьих - все твои вопросы от незнания, и ты хочешь чтобы тебе здесь кто-нить накатал статью как все это работает ? ... вот этого точно никто делать не будет ... твои вопросы касаются фундаментальных понятий работы с АшттП, а соответственно найти статьи это описывающие, не составит труда!
А что ты хочешь увидеть? То, что скрипт asd.php печатает с помощью echo? :lol: Сматри - ты чтобы передать пакет скрипту ads.php должен написать кучу заголовков. С чего ты взял, что функция echo узнает, кто вызывал скрипт, в котором она запущена, сформирует пакет, отправит нужные заголовки и тело ответа ввиде того, что она должна вывести в потоке вывода?
Ну я ж пишу, какая разница какие в asd PHP: <?php foreach ($_POST as $key=>$value){ echo "$key : $value"; } ?> причем тут ифы? должно ведь хоть чтото выдать?
ПОчитал я http://www.i2r.ru/static/247/out_3771.shtml и все равно не пойму с методом POST пожалуйста можете мне подсказать почему не выводиться массив?