2013-11-22 17 views
12

Trong 2 ngày, tôi gặp sự cố với tập lệnh PHP trên máy chủ của mình. Tôi đã thay đổi không có gì và đột nhiên nó không hoạt động nữa.PHP - Loại nội dung không được chỉ định ứng dụng giả định/x-www-form-urlencoded

Đây là mã:

$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); 

tôi nhận được các thông báo lỗi:

Chú ý: file_get_contents(): Content-type không được xác định giả application/x-www-form -urlencoded in

Cảnh báo: file_get_contents (https://mobile.dsbcontrol.de): không mở được luồng: Yêu cầu HTTP không thành công! Máy chủ nội bộ HTTP/1.1 500 Lỗi trong

Nhưng khi tôi thử tập lệnh cục bộ, nó hoạt động hoàn hảo.

+0

Tôi cũng gặp sự cố này. Dường như nó được gây ra bởi việc nâng cấp các gói. Tôi đã thêm: $ http ['header'] = 'Content-Type: application/json'. "\ r \ n"; ngăn chặn thông báo. –

Trả lời

24

Bạn đang đi qua $contexts đến file_get_contents() và chỉ chứa tiêu đề User-Agent trong mảng $opts. Tất cả tiêu đề và tùy chọn khác nằm trong mảng $options mà bạn thêm vào $context nhưng không sử dụng. Hãy thử:

$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

lỗi đầu tiên đã biến mất nhưng vẫn gặp sự cố với cảnh báo. – hannsch

0

Trong khi câu trả lời hiện không làm việc cho tôi, tôi cố gắng giải quyết vấn đề như thế này:

The PHP Manual nói params phải là một mảng kết hợp trong các định dạng $arr['parameter'] = $value. Tham khảo các tham số ngữ cảnh để biết danh sách các thông số luồng chuẩn.

 

    $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); 

Các vấn đề liên quan