【问题标题】:PhpStorm $_POST always emptyPhpStorm $_POST 始终为空
【发布时间】:2016-02-09 10:52:00
【问题描述】:

$_POST 似乎不起作用。我已经安装了 PhpStorm 10.0.3,并使用 WAMP 服务器默认的 php 解释器。

在 index.php 中:

<form method='post' action='a.php'>
    <input type='text' name='user_f'>
    <input type='submit' name='send' value='Send'>
</form>

在a.php中:

var_dump($GLOBALS);

当我在表单中输入“asdf”时:

array (size=9)
      'HTTP_RAW_POST_DATA' => string 'user_f=asdf&send=Send' (length=22)
      '_GET' => 
        array (size=0)
          empty
      '_POST' => 
        array (size=0)
          empty
      '_COOKIE' => 
        array (size=0)
          empty
      '_FILES' => 
        array (size=0)
          empty
      '_ENV' => 
        array (size=0)
          empty
      '_REQUEST' => 
        array (size=0)

$_GET 效果很好,但似乎解释器没有填充 $_POST 变量。

php.version: 5.4.12(使用来自http://php.net/downloads.php 的 5.6.18 和 7 个解释器时同样的问题)

此版本的 php.ini 文件:(默认来自 wamp)

其他端口,如 MySQL 的 (3306),在 PhpStorm 中运行良好。 (与phpmyadmin连接正常)

Xdebug 端口:9000 PhpStorm 内置服务器端口:63342

如果我在默认 localhost:8000 中从 Netbeans IDE 构建,一切正常

我的笔记本电脑也有同样的问题。

【问题讨论】:

  • 使用来自 WAMP(或任何其他适当的 Web 服务器)的 Apache 来处理您的 Web 请求。现在你正在使用 PhpStorm 自己的内置简单 Web 服务器,ATM 在处理 POST 请求时遇到问题。
  • JB 问题跟踪器上的实际(主要)票证:youtrack.jetbrains.com/issue/WEB-17317。除了使用适当的 Web 服务器(Apache/nginx/IIS/etc),您还可以使用 PHP 自己的 Web 服务器(可以使用“PHP 内置 Web 服务器”类型的运行/调试配置启动)
  • 内置服务器终于工作了!!!谢谢!!
  • 也可以为 MacSierra 的 PhpStorm 确认此问题,该问题仅发生在 IDE 中用于发布请求。将我的 php post 请求放在我的 xampp 文件夹中可以正常工作。

标签: php post wamp phpstorm php-ini


【解决方案1】:

新的 PhpStorm 2017.2.2 EAP build (172.3968.23) 解决了这个问题。

Bug WEB-17317 502 发布数据时来自服务器的错误网关错误。

你可以下载它here

完整的发行说明 链接=>confluence.jetbrains.com/display/PhpStorm/PhpStorm+EAP+172.3968.23+Release+Notes

【讨论】:

    【解决方案2】:

    将此解决方法粘贴到您的页面初始化中,以正常使用$_POST

    <?php
    //required when using PhpStorm's built-in webserver
    //which always makes $_POST empty
    //and must have .ini setting always_populate_raw_post_data = -1
    //but will NOT work with enctype="multipart/form-data"
    $raw_str = file_get_contents('php://input'); //eg. name1=val&name2=val
    if($raw_str) {
        foreach (explode('&', $raw_str) as $pair) {
            $keyvalue = explode("=", $pair);
            $key = urldecode($keyvalue[0]);
            $value = urldecode($keyvalue[1]);
            $_POST[$key] = $value;
        }
    }
    ?>
    

    【讨论】:

      【解决方案3】:

      PHPSTORM 没关系,HTTP_RAW_POST_DATA 可以存储请求中无法识别的数据,试试看,content-type:application/x-www-form-urlencoded 添加到Http headers;

      【讨论】:

        【解决方案4】:

        尝试设置表单的enctype,如果没有它,$_POST 数组可能不会被填充,因为 PHP 只接收一串字段而不知道如何处理它:

        <form method='post' action='a.php' enctype="multipart/form-data">
            <input type='text' name='user_f'>
            <input type='submit' name='send' value='Send'>
        </form>
        

        【讨论】:

        • 您的解决方案与讨论主题无关。
        猜你喜欢
        • 2017-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 1970-01-01
        相关资源
        最近更新 更多