我在服务器上运行PHP脚本2天了。我什么都没改变,突然间它再也没用了。
以下是代码:
$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 in
警告:file_get_contents(https://mobile.dsbcontrol.de):无法打开流:HTTP请求失败! HTTP / 1.1 500内部服务器 错误
但是当我在本地尝试脚本时,它可以很好地工作。
答案 0 :(得分:30)
您正在将$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);
答案 1 :(得分:0)
虽然现有的答案对我不起作用,但我设法解决了这个问题:
The 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' => $packet); $context = stream_context_create($transmit_data);