Php fopen不工作:为什么$u POST为空?

Php fopen不工作:为什么$u POST为空?,php,post,Php,Post,我有两个文件active.php和passive.php。 如前所述,我希望active.php在没有用户交互的情况下将数据发布到passive.php . 如果我的代码有效,那么$\u POST数组最终应该包含'Name'=>'johndoe' 我的领航员告诉我的是空的。我做错了什么 我完全知道,有一些解决方案使用解释的Javascript或解释的cURL,但这个问题是专门关于PHP-only方法的,所以请不要这样做 发布任何涉及Javascript或cURL的评论或回答 passive.ph

我有两个文件active.php和passive.php。 如前所述,我希望active.php在没有用户交互的情况下将数据发布到passive.php . 如果我的代码有效,那么$\u POST数组最终应该包含'Name'=>'johndoe' 我的领航员告诉我的是空的。我做错了什么

我完全知道,有一些解决方案使用解释的Javascript或解释的cURL,但这个问题是专门关于PHP-only方法的,所以请不要这样做 发布任何涉及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);

可能要尝试向流上下文添加标题您的解决方案不完整,在我的计算机上无法运行,但在您链接到的页面上,我发现了另一个提示:用http_build_query$post_数据替换$post_数据。在我的计算机上,将此与标题结合使用是可行的。谢谢你的间接帮助help@WarrenBeadus-很高兴它已分类,可能会有所帮助: