HTTP POST из PHP, без cURL

Я использую функцию примера, приведенную в этом сообщении :

<?php function do_post_request($url, $data, $optional_headers = null) { $params = array('http' => array( 'method' => 'POST', 'content' => $data )); if ($optional_headers !== null) { $params['http']['header'] = $optional_headers; } $ctx = stream_context_create($params); $fp = @fopen($url, 'rb', false, $ctx); if (!$fp) { throw new Exception("Problem with $url, $php_errormsg"); } $response = @stream_get_contents($fp); if ($response === false) { throw new Exception("Problem reading data from $url, $php_errormsg"); } return $response; } ?> 

Я также попытался использовать аналогичный подход, используя file_get_contents() , например:

 $options = array( 'http'=>array( 'method'=>"POST", 'header'=> "Accept-language: en\r\n". "Content-type: application/x-www-form-urlencoded\r\n", 'content'=>http_build_query( array( 'arg1'=>'arg_data_1', 'oper'=>'get_data', 'arg2'=>'arg_data_2', 'id_number'=>'7862' ),'','&' ) )); $context = stream_context_create($options); $refno = file_get_contents('/path/to/script/script.php',false,$context); var_dump($refno); 

С обоими этими сценариями ответ от сценария сервера тот же, и это ТЕКСТ script.php . Код сценария сервера никогда не запускается, и текстовый контент (PHP-код) скрипта возвращается исходному скрипту.

Немного странно, что он не возвращает весь текст, а только некоторые части … Я попытался создать тестовый скрипт ( test.php ), который просто содержит:

 <?php echo '{"a":1,"b":2,"c":3,"d":4,"e":5}'; ?> 

но это ничего не возвращает из запроса POST, поэтому я не включил его. script.php – это длинный скрипт, который выполняет много логики и запросы MySQL, а затем возвращает объект JSON.

Желаемый результат будет состоять в том, чтобы выполнить PHP-код и вернуть объект JSON (способ работы с ajax).

Что я делаю не так?

Вы пытаетесь открыть сценарий доступа локально. Вы должны назвать это как любой другой внешний скрипт, например

 $refno = file_get_contents('http://yourhost/path/to/script/script.php',false,$context);