可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
For 2 days I'm having trouble with my PHP script on my server. I've changed nothing and suddenly it didn't work anymore.
Here is the code:
$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);
I'm getting these error messages:
Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in
Warning: file_get_contents(https://mobile.dsbcontrol.de): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in
But when I try the script locally it works perfectly.
回答1:
You are passing $contexts
to file_get_contents()
and that only contains the User-Agent
header in the $opts
array. All other headers and options are in the $options
array which you add in to $context
but aren't using. Try:
$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);
回答2:
While the existing answers did not work for me, I managed to solve the problem like this:
The PHP Manual says params
must be an associative array in the format $arr['parameter'] = $value
. Refer to context parameters for a listing of standard stream parameters.
$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' => $packet); $context = stream_context_create($transmit_data);