Невозможно переопределить заголовки PHP-типа контента

в настоящее время сервер возвращает следующие заголовки примерно так:

2014-11-13 00: 20: 04.079 myiOSApplication 46715: 1003]:

{ status code: 200, headers {
Connection = close;
"Content-Length" = 5;
"Content-Type" = "text/html; charset=UTF-8";
"Content-Typesss" = "application/json; charset=UTF-8"; //<-- Notice this appears, but soon as I remove the extra s characters, then it wont override the line above. :( so the content always returns `text/html` instead of the desired `application/json`
Date = "Thu, 13 Nov 2014 00:20:03 GMT";
Server = "Apache/2.2.26 (Amazon)";
Status = "200 OK";
StatusCode = 200;
"X-Powered-By" = "PHP/5.3.28";
} }

Я могу с легкостью установить другие заголовки, но СКОРО, поскольку я пытаюсь установить заголовок с ключом: Content-Type вот так:

header('Content-Type : application/json; charset=UTF-8');

тогда мой ключ переопределяется с системным и игнорирует мой тип заголовка.

Что я могу сделать?

Обновление 1:

В ответ на запрос @ scuzzy о —

Что произойдет, если вы отобразите свой заголовок, а затем выйдите (); сценарий? например, заголовок (‘Content-Type: application / json; charset = UTF-8’); exit (‘{«hello»: «world»}’);

Вот ответ iOS на это:

2014-11-13 00:59:25.801 myiOSApplication [46849:1f07] RESPONSE: <NSHTTPURLResponse: 0x61800002c060> { URL: http://www.riabp.com/KINGS/Secure/Rajam/Get/Employees } { status code: 200, headers {
Connection = close;
"Content-Length" = 18;
"Content-Type" = "text/html; charset=UTF-8";
Date = "Thu, 13 Nov 2014 00:59:25 GMT";
Server = "Apache/2.2.26 (Amazon)";
"X-Powered-By" = "PHP/5.3.28";
} }
2014-11-13 00:59:25.801 KingsEMS[46849:303] Error: Request failed: unacceptable content-type: text/html
2014-11-13 00:59:25.801 KingsEMS[46849:303] JSON Error:     {"hello":"world"}

0

Решение

Я не уверен, что это все еще активный вопрос, но у меня была похожая проблема, из-за которой заголовок типа контента устанавливался PHP для text / html, но когда я хотел загрузить изображение, используя PHP, я не мог t обновить тип содержимого заголовка на image / gif, чтобы файл загружался, но не мог быть открыт.

В итоге ответом было вернуть выходной буфер и убедиться, что он пуст:

$html = ob_get_clean();
$html = str_replace(" ", "", $html);

Я предполагаю, что где-то в коде было какое-то пустое пространство, которое заставляло вывод оставаться исходным типом содержимого.

Ричард

ОБНОВЛЕНИЕ: это должно быть добавлено до установки нового значения заголовка, в случае, если это не было очевидно.

1

Другие решения

Если вы используете фреймворк, такой как Silex, Zend и т. Д., Или просто пишете обычный php-код, и вы используете эти функции

 json_encode($query)         //php json function
$app->json($query)          //Silex framework function`

но ни один из них не решает вашу потребность в получении типа контента json, есть небольшая хитрость, которая может вам помочь:

     header('Content-Type: application/json');  //before everything
$query =....                              //retrieve your data in every way you need
$queryjsoned=json_encode($query);    //jsonify your query
exit($json);                      //it's very important,it solves your life
return $queryjsoned;             //if you are in a function/Route,but it isn't mandatory

очень странно, что вам нужно сделать выход для переопределения типа контента.

0

По вопросам рекламы [email protected]