У меня есть два файла active.php и passive.php. Я хочу, чтобы active.php отправлял данные без взаимодействия с пользователем на passive.php, как описано здесь. Если мой код работал, в конце массив $ _POST должен содержать 'Name' => 'John Doe' вместо того, чтобы быть пустым, поскольку мой навигатор сообщает мне. Что я сделал не так?
Я полностью понимаю, что есть решения, использующие Javascript (как описано здесь) или cURL (как описано здесь), но этот вопрос касается только метода PHP, поэтому, пожалуйста, не оставляйте никаких комментариев или ответов, связанных с Javascript или cURL.
Содержание passive.php:
<?php
var_dump($_POST);
?>
Содержание active.php:
<?php
$post_data=array('Name'=>'John Doe');
$url='http://localhost:8888/passive.php';
$params = array('http' => array(
'method' => 'POST',
'content' => $post_data
));
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
$response = @stream_get_contents($fp);
fclose($fp);
var_dump($response);
?>
На самой странице руководства PHP, найденной здесь, в рейтинге комментариев объясняется, как выполнить операцию POST с использованием потока. Как уже упоминалось в комментарии выше, вы просто пропускаете заголовок
$post_data=array('Name'=>'John Doe');
$url='http://localhost:8888/passive.php';
$params = array(
'http' => array
(
'method' => 'POST',
'header'=>"Content-Type: application/x-www-form-urlencoded",
'content' => $post_data
)
);
$ctx = stream_context_create($params);
$fp = fopen($url, 'rb', false, $ctx);
$response = stream_get_contents($fp);