Показать сообщение отдельно

  #334  
Старый 08.08.2007, 10:23
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
С нами: 9999746

Репутация: 1318


По умолчанию

myp3zz, смотря каким методом передаются данные... Если методом GET тогда всё очень просто... Предположим, что твой скрипт обработки называется myhandler.php, а чужой - somehandler.php и при этом ты взаимодействуешь с переменными a, b и c. Тогда, чтобы одновременно обработать данные в твоём скрипте, и при этом передать их другому, твой myhandler.php должен выглядеть так:

Цитата:
<?php

ob_start();

// Тут идёт обработка переменных $_GET["a"], $_GET["b"] и $_GET["c"]

// Редирект юзера
header("Location: http://somehost.ru/somehandler.php?a={$_GET["a"]}&b={$_GET["b"]}&c={$_GET["c"]}");

ob_end_flush();

?>
В случае, если данные передаются методом POST, то тут уже придётся реализовать взаимодействие через сокеты или библиотеку CURL. Если через сокеты, то твой скрипт myhandler.php будет смотреться примерно так:

Цитата:
<?php

$requestContent = sprintf("a=%s&b=%s&c=%s", $_POST["a"], $_POST["b"], $_POST["c"]);

$sendData = "POST /somehandler.php HTTP/1.1\r\n";
$sendData .= "Host: www.somehost.ru\r\n";
$sendData .= "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n";
$sendData .= "Pragma: no-cache\r\n";
$sendData .= "Content-Type: application/x-www-form-urlencoded\r\n";
$sendData .= sprintf("Content-Length: %d\r\n", strlen($requestContent));
$sendData .= "Connection: Close\r\n\r\n";
$sendData .= $requestContent;

$socket = fsockopen("www.somehost.ru", 80, $errno, $errstr, 60);
if (!$socket) die($errstr);

$ret = fwrite($socket, $sendData);
if (!$ret) die("Can't write to socket");

$response = "";
while (!feof($socket)) {
response .= fgets($socket, 1024);
}
fclose($socket);

// На данном этапе у нас в $response будет ответ сервера, разумеется
// его нужно будет проанализировать, чтобы понять удачно ли были
// переданы данные. Тут же организуем обработку переменных
// $_POST["a"], $_POST["b"] и $_POST["c"]

?>
Если взаимодействие будет через CURL, то тогда придётся написать что-то типа такого:
Цитата:
<?php

$requestContent = sprintf("a=%s&b=%s&c=%s", $_POST["a"], $_POST["b"], $_POST["c"]);

$sendData = "POST /somehandler.php HTTP/1.1\r\n";
$sendData .= "Host: www.somehost.ru\r\n";
$sendData .= "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n";
$sendData .= "Pragma: no-cache\r\n";
$sendData .= "Content-Type: application/x-www-form-urlencoded\r\n";
$sendData .= sprintf("Content-Length: %d\r\n", strlen($requestContent));
$sendData .= "Connection: Close\r\n\r\n";
$sendData .= $requestContent;

$curlHandler = curl_init();

curl_setopt($curlHandler, CURLOPT_URL, "http://www.somehost.ru");
curl_setopt($curlHandler, CURLOPT_PORT, 80);
curl_setopt($curlHandler, CURLOPT_TIMEOUT, 60);
curl_setopt($curlHandler, CURLOPT_CUSTOMREQUEST, $sendData);
curl_setopt($curlHandler, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curlHandler, CURLOPT_HEADER, true);
curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlHandler, CURLOPT_FAILONERROR, false);

$response = curl_exec($curlHandler);

if (curl_errno($curlHandler) != CURLE_OK) die(curl_error($curlHandler));

// На данном этапе у нас в $response будет ответ сервера, разумеется
// его нужно будет проанализировать, чтобы понять удачно ли были
// переданы данные. Тут же организуем обработку переменных
// $_POST["a"], $_POST["b"] и $_POST["c"]

?>
 
Ответить с цитированием