私はfsockopenを使用してデータを接続し、スクリプトに送信しています。問題は、下の出力でわかるように受信側でデータが受信されないことです。空の配列だけが出力されます。私はTamlynsの回答に基づいてここに答えました:PHP Post data with Fsockopen。私は 'ポストパラメータを作成する彼の方法を試しました、出力の違いはありません。fsockopenでデータを送信すると、受信側でデータが受信されない
私の主なスクリプト:
<?php
session_start();
$fp = fsockopen("192.168.1.107",
80,
$errno, $errstr, 10);
$params = "smtp=posteddata\r\n";
$params = urlencode($params);
$auth = base64_encode("kaand:kaand123");
if (!$fp) {
return false;
} else {
error_log("4");
$out = "POST /smic/testarea/fsockopen_print_post.php HTTP/1.1\r\n";
$out.= "Host: 192.168.1.107\r\n";
$out.= "Content-Type: application/x-www-form-urlencoded\r\n";
$out.= "Authorization: Basic ".$auth;
$out.= 'Content-Length: '.strlen($params).'\r\n';
$out.= "Connection: Close\r\n\r\n";
$out .= $params;
fwrite($fp, $out);
fflush($fp);
header('Content-type: text/plain');
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
?>
fsockopen_print_post.php:
<?php
session_start();
print_r($_POST);
$raw_data = $GLOBALS['HTTP_RAW_POST_DATA'];
parse_str($raw_data, $_POST);
print_r($_POST);
?>
出力:
HTTP/1.1 200 OK
Date: Mon, 19 Mar 2012 09:21:06 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.10
Set-Cookie: PHPSESSID=i4lcj5mn1ablqgekb1g24ckbg5; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 20
Connection: close
Content-Type: text/html; charset=UTF-8
Array
(
)
Array
(
)
何問題はどのように修正するのですか?
ご回答ありがとうございます。これは本当に必要ですか? fsockopenの例を見てみると、このようなことはしません([php.net](http://se2.php.net/manual/en/function.fsockopen.php))、私が見つけた他の例これはどこにも使われていません。私はちょうど、データを投稿して切断する(非同期の方法で)する必要があります。 – Nicsoft
複数のクライアントをブロックせずに処理できるようにする必要がある場合は必要です。あなたが「知っている」なら、あなたはただ一つしか必要としません。これは今あなたがしていることを意味しますが、将来はより多くを必要とすることを意味します。しかし、私は、この方法でソリューションを実装することをお勧めします。さらに、あなたは何も失わないように立っていますが、これがどのように機能するかを理解すると、より良い知識を得ることができます。 ;) – deed02392
学習曲線は今のところかなり急です;)これは複数のクライアントの処理に役立ちますが、これは受信したデータを私が求めているものにするのに役立ちますか? – Nicsoft