Удаленный запуск скрипта.

Fed_1359

Новичок
Удаленный запуск скрипта.

Как внутри скрипта загрузить удаленно другой скрипт которий лежит на другом сервере. Т.е. нужно просто чтобы второй скрипт исполнился на втором сервере.

Сеычас у меня это делается во фрейме, хочу сделать внутри скрипта незаметно.
 

Бочонок

http://frontender.info
Ну например fsockopen, или CURL.
Технически тебе нужно только сделать http запрос соответствующий серверу.
 

Бочонок

http://frontender.info
Ну и? В документацию.

Тебе пример нужен?
Ну например:

PHP:
$post_var = "x=67&y=13";

$tunnel=@fsockopen($host,80, $errno, $errstr, 60);
if ($tunnel!==false){
	
	$request = "POST /script.php HTTP/1.1\r\n";
	$request .= "Accept: */*\r\n";
	$request .= "Referer: http://".$host."/script.php\r\n";
	$request .= "Accept-Language: uk\r\n";
	$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
	$request .= "Accept-Encoding: gzip, deflate\r\n";
	$request .= "User-Agent: ".$_SERVER["HTTP_USER_AGENT"]."\r\n";
	$request .= "Host: ".$host."\r\n";
	$request .= "Content-Length: ".strlen($post_var)."\r\n";
	$request .= "Connection: Keep-Alive\r\n";
	$request .= "Cache-Control: no-cache\r\n";
	$request .= "Cookie: var1=12; var2=234\r\n\r\n";
	$request .= $post_var;

	$page='';
	$variant=0;
    fwrite($tunnel, $request);
    while(!feof($tunnel)){
        $page.=fgets($tunnel, 128);
    }
 
    fclose($tunnel);
    
}else{

die("Error number: ".$errno.". ".$errstr);
}
Это что касается fsockopen.
Как составлять запрос - посмотри в спецификации на HTTP.
rfc 2616 кажется последняя

Что касается курла - все еще проще. касательно POST - посомотри в документации. Есть соответствующий curl_setopt.
PHP:
                $hc = curl_init ();
		curl_setopt($hc,CURLOPT_VERBOSE,1);
		curl_setopt($hc,CURLOPT_HEADER,1);
		curl_setopt($hc,CURLOPT_TIMEOUT,120);
		curl_setopt($hc,CURLOPT_USERAGENT,$_SERVER["HTTP_USER_AGENT"]);
		curl_setopt($hc,CURLOPT_RETURNTRANSFER,0);
		curl_setopt($hc,CURLOPT_URL,$link_addr);
		curl_exec($hc);
		if(curl_errno($hc)!==0){
			echo "
			Ошибка ".curl_errno($hc).": ".curl_error($hc)."
			";	
		}
                curl_close ($hc);
-~{}~ 31.03.07 17:27:

http://php.net/fsockopen
http://php.net/CURL

-~{}~ 31.03.07 17:28:

http://www.google.com.ua/search?q=rfc+2616&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:official&client=firefox-a - Результат поиска с помощью гугла - тут цпецификации на HTTP протокол
Даже переводные.
 

Бочонок

http://frontender.info
Пожалуста. Надесь что все получится.
Будут вопросы - пиши.
Если буду на форуме - помогу чем смогу.
 

Fed_1359

Новичок
На сервере проблема с отправкой почты. Чтобы отправлять через другой сервер.
 

NiGHT

Новичок
У меня возникают большие задержки на отправке POST запроса, не могу понять где ошибка.

PHP:
  $host = "localhost";
  $page = "/in.php";
  $fp = @fsockopen ("$host", 80, &$errno, &$errdesc,60);
  if ( ! $fp ) die ("Не могу соединиться с сервером $host\n<BR>Ошибка $errno\n<BR>Описание $errdesc\n<BR>");
  $post_var = "x=67&y=13";
  $request =  "POST $page HTTP/1.1\r\n";

  $request .= "Accept: */*\r\n";
  $request .= "Referer: [url]http://[/url]".$host."/script.php\r\n";
  $request .= "Accept-Language: uk\r\n";
  $request .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $request .= "Accept-Encoding: gzip, deflate\r\n";
  $request .= "User-Agent: ".$_SERVER["HTTP_USER_AGENT"]."\r\n";
  $request .= "Host: ".$host."\r\n";
  $request .= "Content-Length: ".strlen($post_var)."\r\n";
  $request .= "Connection: Keep-Alive\r\n";
  $request .= "Cache-Control: no-cache\r\n";
  $request .= "Cookie: var1=12; var2=234\r\n\r\n";
  $request .= $post_var; 


  $page = array ();
  
 // fputs ($fp, $request);
    fwrite($fp, $request); 


  while (! feof ($fp) )
   {
     $s = fgets ($fp, 1024);
     $page[] = $s;
     print $s;

   };
  fclose ($fp);
Дальше происходит большая задержка (видно вылетает по таймауту). И ответ :

HTTP/1.1 200 OK
Date: Sun, 13 Apr 2008 20:28:33 GMT
Server: Apache/1.3.33 (Win32) PHP/4.4.2
X-Powered-By: PHP/4.4.2
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html

22
POST: x => 67<BR>POST: y => 13<BR>
0
in.php должен вывести содержимое $_POST и $_GET, т.е. только: "POST: x => 67<BR>POST: y => 13<BR>". Откуда взялись 22 и 0 я не знаю.


Помогите найти ошибку или понять что это за 22 и 0.
 

kruglov

Новичок
Читать RFC про HTTP насчет chunked,
или искать это слово на форуме.
 

NiGHT

Новичок
Автор оригинала: kruglov
chunked
О! одно слово и всё сразу работает :D .


Кому на будущее надо исправления к моему посту:

PHP:
   $request =  "POST $page HTTP/1.0\r\n"; 
   $request .= "Connection: Close\r\n";
первая строка что бы chunked не было (т.е. цифр)
вторая что бы не тормозило.
 
Сверху