2013-11-22 47 views
12

2天內,我在我的服務器上遇到了PHP腳本的問題。我什麼也沒改變,突然間它不再工作了。PHP - 內容類型未指定假定應用程序/ x-www-form-urlencoded

下面是代碼:

$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()函數:內容類型未指定假定 應用程序/ x WWW的形式-urlencoded

警告:file_get_contents(https://mobile.dsbcontrol.de):無法打開流:HTTP請求失敗! HTTP/1.1 500內部服務器 錯誤

但是,當我在本地嘗試腳本它完美的作品。

+0

我也遇到過這個問題。它看起來是由升級包引起的。我添加了:$ http ['header'] ='Content-Type:application/json'。爲 「\ r \ n」 個;這會抑制通知。 –

回答

24

您正在將$contexts傳遞給file_get_contents(),並且只包含$opts數組中的User-Agent標頭。所有其他標題和選項都在$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); 
+0

第一個錯誤已經過去了,但我仍然遇到了警告。 – hannsch

0

而現有的答案並沒有爲我工作,我設法解決這樣的問題:

The PHP Manualparams必須是格式$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); 

相關問題