【问题标题】:Why does PHP not process my request?为什么 PHP 不处理我的请求?
【发布时间】:2017-11-17 00:40:03
【问题描述】:

我有一个 PHP 项目,其中有一个 index.html,格式很简单:

    <p>Test connection</p>
    <form action="Servicios.php" method="post">
        <input type='submit' name='Test' value='Test'>
    </form>

在 Servicios.php 中我试图像这样处理它

<?php    
   echo "can you print this";
    if($_SERVER["REQUEST_METHOD"]=="POST" )
    {
      if(!empty($_POST["Test"]))
      {
         echo "Hello world";
      }
    }

但它不起作用,那是因为它永远不会评估第一个 if 像“true”。顶部的第一个回显确实有效,但如果我对 $_SERVER["REQUEST_METHOD"] 进行回显,它不会给我任何东西。我已经尝试过 isset($_POST['Hola']) 但我得到了相同的结果。

这只发生在我在互联网主机中的项目中。我使用 netbeans 和 xampp 在本地计算机上编写了完全相同的代码,并且运行良好。我不知道为什么。

我觉得我犯了一些愚蠢的错误,但我找不到。

我的主机是来自 ec2 Amazon Web Services 的 Ubuntu 服务器。

编辑 这是 Servicios.php 中&lt;?=print_r($_SERVER);?&gt; 的输出 我用 [ip] 替换了显示我的 ip 的部分

Array ( 
    [HTTP_HOST] => [ip] 
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0 
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
    [HTTP_ACCEPT_LANGUAGE] => es-MX,es-ES;q=0.9,es;q=0.7,es-AR;q=0.6,es-CL;q=0.4,en-US;q=0.3,en;q=0.1 
    [HTTP_ACCEPT_ENCODING] => gzip, deflate 
    [HTTP_REFERER] => http://[ip]/ProyectoPM/ 
    [CONTENT_TYPE] => application/x-www-form-urlencoded 
    [CONTENT_LENGTH] => 11 
    [HTTP_CONNECTION] => keep-alive 
    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 
    [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
    [SERVER_SIGNATURE] => Apache/2.4.18 (Ubuntu) Server at [ip] Port 80
    [SERVER_SOFTWARE] => Apache/2.4.18 (Ubuntu) 
    [SERVER_NAME] => [ip] 
    [SERVER_ADDR] => 172.31.43.105 
    [SERVER_PORT] => 80 
    [REMOTE_ADDR] => 189.208.87.127 
    [DOCUMENT_ROOT] => /var/www/html 
    [REQUEST_SCHEME] => http 
    [CONTEXT_PREFIX] => 
    [CONTEXT_DOCUMENT_ROOT] => /var/www/html 
    [SERVER_ADMIN] => webmaster@localhost 
    [SCRIPT_FILENAME] => /var/www/html/ProyectoPM/Servicios.php 
    [REMOTE_PORT] => 5672 
    [GATEWAY_INTERFACE] => CGI/1.1 
    [SERVER_PROTOCOL] => HTTP/1.1 
    [REQUEST_METHOD] => POST 
    [QUERY_STRING] => 
    [REQUEST_URI] => /ProyectoPM/Servicios.php 
    [SCRIPT_NAME] => /ProyectoPM/Servicios.php 
    [PHP_SELF] => /ProyectoPM/Servicios.php 
    [REQUEST_TIME_FLOAT] => 1510846404.812 
    [REQUEST_TIME] => 1510846404 ) 1 

这是在它返回的数组中&lt;?=var_dump($_SERVER); ?&gt;

 ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" 
 ["REQUEST_METHOD"]=> string(4) "POST" 
 ["QUERY_STRING"]=> string(0) "" 
 ["REQUEST_URI"]=> string(25) "/ProyectoPM/Servicios.php" 
 ["SCRIPT_NAME"]=> string(25) "/ProyectoPM/Servicios.php" 
 ["PHP_SELF"]=> string(25) "/ProyectoPM/Servicios.php" 
 ["REQUEST_TIME_FLOAT"]=> float(1510847672.582) 
 ["REQUEST_TIME"]=> int(1510847672) } 

更重要的修改 起初我说一个简单的echo "can you print this"; 在主机中工作,现在我发现它也没有。当我通过单击 index.html 中的按钮移至 Servicios.php 时,浏览器将移至 Servicios.php(它在 url 中显示),但它根本不显示任何内容。仅当我删除所有代码并输入&lt;?=print_r($_SERVER);?&gt; 之类的指令时,它才会显示一些东西,结果我已经在上面放了。

【问题讨论】:

  • 运行print_r($_SERVER) 看看里面有什么。
  • 显示该请求的 Web 服务器日志。
  • 好的,print_r($_SERVER) 给了我一个很长的数组,我到底应该搜索什么?
  • 你能告诉我们吗?你可以找REQUEST_METHOD
  • 你确定var_dump($_SERVER["REQUEST_METHOD"]) 什么都没有显示吗?

标签: php html amazon-ec2


【解决方案1】:
if(isset($_POST['Test'])){
echo 'Hello world';
}

这应该可行。这是检查按钮是否使用 POST 方法提交。这应该足以检查表单是否已提交。

【讨论】:

  • 这不适用于 OP。这是在 localhost 中工作的。
  • 您正在删除使用empty()进行的检查OP
【解决方案2】:

你可以试试这个检查post方法

if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {
 // if form submitted with post method
    // validate request, 
    // manage post request differently, 
    // log or don't log request,
  // redirect to avoid resubmition on F5 etc
}

【讨论】:

  • 无需将其设为大写 ​​(this answer shows why),如果使用 equal 进行检查不起作用,则使用 identical 是也不行……
猜你喜欢
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 2012-03-28
相关资源
最近更新 更多