2日間、サーバー上のPHPスクリプトに問題があります。何も変更していないのに、突然機能しなくなりました。
これがコードです:
$query = http_build_query($data);
$options = array(
'http' => array(
'header' => "Content-Type: application/x-www-form-urlencoded\r\n".
"Content-Length: ".strlen($query)."\r\n",
'method' => "POST",
'content' => $query,
),
);
$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n",'method' => 'POST',
'content' => http_build_query($data),));
$contexts = stream_context_create($opts);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $contexts, -1, 40000);
次のエラーメッセージが表示されます。
注意:file_get_contents():application/x-www-form-urlencodedを想定してコンテンツタイプが指定されていません
警告:file_get_contents( https://mobile.dsbcontrol.de ):ストリームを開けませんでした:HTTPリクエストが失敗しました! HTTP/1.1 500内部サーバーエラー
しかし、スクリプトをローカルで試すと、完全に機能します。
_$contexts
_をfile_get_contents()
に渡していますが、これには_User-Agent
_配列の_$opts
_ヘッダーのみが含まれています。他のすべてのヘッダーとオプションは、_$options
_に追加した_$context
_配列にありますが、使用していません。試してください:
_$query = http_build_query($data);
$options = array(
'http' => array(
'header' => "Content-Type: application/x-www-form-urlencoded\r\n".
"Content-Length: ".strlen($query)."\r\n".
"User-Agent:MyAgent/1.0\r\n",
'method' => "POST",
'content' => $query,
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context, -1, 40000);
_
既存の答えは私にとってはうまくいきませんでしたが、私はこのように問題を解決することができました:
PHP Manual は、params
は$arr['parameter'] = $value
形式の連想配列である必要があると述べています。標準ストリームのリストについては、コンテキストパラメータを参照してくださいパラメーター。
$ header = array( "Content-Type:application/x-www-form-urlencoded"、 "Content-Length:" .strlen( $ postdata) ); $ packet ['method'] = "POST"; $ packet ['header'] = implode( "\ r\n"、$ header); $ packet ['content'] = $ postdata; $ transmit_data = array( 'http' => $パケット); $ context = stream_context_create($ transmit_data);