检查“php:// input”AND $ _POST

时间:2014-08-08 20:51:37

标签: php ajax

我已经看过good posts about php://输入vs $ _POST,但如果我需要检查两者,我仍然感到困惑。或者只是检查php://输入。有什么想法吗?

我在这里做的多余事情是什么?还是必要的?

<?php
    if( $_POST ) {
        // $_POST variables are set, do the stuff
    } else {
        // get php://input
        $php_input = file_get_contents("php://input");

        if( $php_input ) {
            // php input exists, do the stuff
            $php_postdata = json_decode($php_input);

            // ...
        } else {
            // no $_POST and no php://input, so throw an error
            echo 'Error';
            exit();
        }
    }
?>

修改

我不希望同时输入$ _POST和php://;一个或另一个。用例是当我通过jQuery访问PHP时获得$ _POST,当通过AngularJS访问PHP时我得到php://输入。

1 个答案:

答案 0 :(得分:0)

你的问题是&#34;我需要检查两者,还是仅检查一个。&#34; This question's answer准确地解释了每个中的内容以及它们之间的差异。

我们无法知道您需要检查哪一个,但如果您阅读了该问题及其答案,您将知道哪个人拥有您需要的数据。如果您只需要合并两个输入,我们需要知道您希望获得什么类型的数据 - 例如,如果它以application/json的形式进入,您可以这样做:

$_POST = array_merge($_POST, json_decode(file_get_contents("php://input"), true));

编辑:知道这是针对angular的,我会用json_decoded输入覆盖$ _POST字段:

if (empty($_POST)) {
    $_POST = json_decode(file_get_contents("php://input"), true));
}

或者以一种显示在$_POST变量中的方式对Angular POST进行数据处理,a very detailed guide here解释了如何执行此操作。