从间接调用PHP脚本访问$ _REQUEST

时间:2014-02-26 16:24:42

标签: php post get request

我想在生成JavaScript文件的PHP脚本中访问$ _REQUEST。这是我的准系统index.php页面:

<html>
<head>
  <script src="phpGeneratedScript.js.php"></script>
</head>
<body>
  <?php echo json_encode($_REQUEST); ?>
</body>
</html>

这是我的准系统.js.php文件:

<?php echo "alert('".json_encode($_REQUEST)."')"; ?>

当我访问index.php?key=value时,我会在页面中看到一个查询,但不在警报中。有没有办法从不直接include d的PHP脚本中访问$ _REQUEST(或$ _GET或$ _POST)?

编辑:要部分回答我自己的问题 - 这会将查询字符串添加到对返回JavaScript文件的php文件的调用中:

<html>
<head>
  <?php
  $query = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
  echo
  "<script src='phpGeneratedScript.js.php?$query'></script>"
  ?>
</head>
<body>
  <?php echo json_encode($_REQUEST); ?>
</body>
</html.

但是,这不会处理可能与原始请求一起发送的POST数据。

根据drew010的建议,我尝试了这个:

html

<html>
<head>
  <?php
  $query = http_build_query($_REQUEST);
  echo
  "<script src='phpGeneratedScript.js.php?$query'></script>"
  ?>
</head>
<body>
  <?php
    if (!$_POST) { ?>
      <form action="test.php" method="post">
        <!--input type="text" name="name" value="value"--><br>
        <input type='submit' name="submit" value='Submit'>
      </form>
 <? } else {
      echo json_encode($_REQUEST);
      echo "<br />";
      echo json_encode($_POST);
    }
  ?>
</body>

js.php

<?php
echo "console.log('".json_encode($_REQUEST)."');";
echo "console.log('".json_encode($_POST)."')";
?>

点击“提交”按钮后,这是浏览器窗口中的输出:

{"submit":"Submit","PHPSESSID":"b6eb4d1d73fc75976a16031003f58fa0"}
{"submit":"Submit"}

$ _REQUEST和$ _POST都已正确填充。

以下是控制台中的输出:

{"submit":"Submit","PHPSESSID":"b6eb4d1d73fc75976a16031003f58fa0"}
[]

$ _POST数据已添加到$ _REQUEST数据中,但在$ _POST中不可见。这是你所期望的,还是有办法调整我的脚本以正确显示$ _POST数据?

1 个答案:

答案 0 :(得分:1)

而不是:

$query = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
echo "<script src='phpGeneratedScript.js.php?$query'></script>";

尝试:

$query = http_build_query($_REQUEST);
parse_url()

PHP_URL_QUERY只会返回查询字符串中的GET数据。

http_build_query()将根据GET和POST数据创建一个URL编码的字符串。