postしたコンテンツの取得
いつもお世話になっております。
PHPでHTTPでPOSTされたコンテンツを受け取るサンプルとして以下のような
スクリプトを作成しました。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<p><?php
var_dump(file_get_contents('php://input'));
?></p>
</body>
</html>
そしてデータの送信側のPHPスクリプトとして以下のようなものを作成しました。
<?php
function post_request($url, $data, $referer='') {
// Convert the data array into URL Parameters like a=b&foo=bar etc.
$data = http_build_query($data);
// parse the given URL
$url = parse_url($url);
if ($url['scheme'] != 'http') {
die('Error: Only HTTP request are supported !');
}
// extract host and path:
$host = $url['host'];
$path = $url['path'];
$port = $url['port'];
var_dump($url);
$fp = fsockopen($host, $port, $errno, $errstr, 30);
if ($fp){
// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
if ($referer != '')
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
$result = '';
while(!feof($fp)) {
// receive the results of the request
$result .= fgets($fp, 128);
}
}
else {
return array(
'status' => 'err',
'error' => "$errstr ($errno)"
);
}
// close the socket connection:
fclose($fp);
// split the result header from the content
$result = explode("\r\n\r\n", $result, 2);
$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';
// return as structured array:
return array(
'status' => 'ok',
'header' => $header,
'content' => $content
);
}
$fileHandle = fopen("/home/a/text.txt", "rb");
$fileContents = stream_get_contents($fileHandle);
fclose($fileHandle);
var_dump(post_request('http://ipaddress/rawpost.php',$fileContents));
?>
上記PHPスクリプトによってPOSTされた結果のHTMLの
var_dump(file_get_contents('php://input'))
の部分はstring(0)となりました。
HTTPのPOSTのコンテンツ部分を取得するには
どのようなスクリプトを記載すればよいのでしょうか。
どなたかご教授よろしくお願いいたします。
お礼
何故か、省略していたindexを書くことでPOSTできるようにはなりました。 ただ、他のページはindex省略してもPOSTできるので、依然謎な症状です。 POSTができるようになったことから、弾く設定はしていないと思われます。