PhpStorm $_POST总是为空

9

$_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 版本:5.4.12 (使用来自 http://php.net/downloads.php 的 5.6.18 和 7 解释器也存在同样的问题)

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

其他端口(如 MySQL 的 3306 端口)在 PhpStorm 中可以正常工作。(与 phpmyadmin 的连接正常)

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

如果我从 Netbeans IDE 中使用默认的 localhost:8000 构建,则一切正常。

在我的笔记本电脑上也存在同样的问题。


13
使用WAMP(或其他适当的Web服务器)中的Apache来处理您的Web请求。目前,您正在使用PhpStorm自己内置的简单Web服务器,但它在处理POST请求方面存在问题。 - LazyOne
3
JB问题跟踪器上的实际(主要)票证:https://youtrack.jetbrains.com/issue/WEB-17317。除了使用适当的Web服务器(Apache/nginx/IIS等)外,您也可以使用PHP自己的Web服务器(可以使用“PHP内置Web服务器”类型的运行/调试配置来启动)。 - LazyOne
内置服务器终于可以工作了!!!谢谢!! - espumita
可以确认这个问题在PhpStorm for macSierra上存在,问题只出现在IDE中的post请求。将我的php post请求放在xampp文件夹中可以正常工作。 - user3095495
4个回答

2
新版PhpStorm 2017.2.2 EAP构建(172.3968.23)已经解决了这个问题。
当提交数据时,Bug WEB-17317会导致服务器返回502 Bad Gateway错误。
您可以在这里下载它。
完整的发行说明链接=>confluence.jetbrains.com/display/PhpStorm/PhpStorm+EAP+172.3968.23+Release+Notes

0

对于PHPSTORM来说并不重要,HTTP_RAW_POST_DATA可以存储请求中未被识别的数据,你可以试一下,在Http头中添加content-type:application/x-www-form-urlencoded;


0
将以下内容粘贴到页面的初始化中以正常使用$_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;
    }
}
?>

-2
尝试设置表单的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>

你的解决方案与讨论主题无关。 - javad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接