В течение 2 дней у меня возникают проблемы с моим PHP-скриптом на моем сервере. Я ничего не изменил, и внезапно это уже не сработало.
Вот код:
$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-form-urlencoded в
Предупреждение: file_get_contents ( https://mobile.dsbcontrol.de ): не удалось открыть поток: HTTP-запрос не удался! Ошибка внутреннего сервера HTTP / 1.1 500
Но когда я пытаюсь запустить скрипт, он работает отлично.
Вы передаете $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);
Хотя существующие ответы не сработали для меня, мне удалось решить проблему следующим образом:
Руководство PHP говорит, что params
должен быть ассоциативным массивом в формате $arr['parameter'] = $value
. Обратитесь к параметрам контекста для перечисления стандартных параметров потока.
$ header = массив ( «Content-Type: application / x-www-form-urlencoded», «Content-Length:» .strlen ($ postdata) ); $ packet ['method'] = "POST"; $ packet ['header'] = implode ("\ r \ n", $ header); $ packet ['content'] = $ postdata; $ transmission_data = array ('http' => $ packet); $ context = stream_context_create ($ transmission_data);