【问题标题】:Divide by Zero Anomaly in PHPPHP中除以零异常
【发布时间】:2013-08-22 22:05:03
【问题描述】:

好的,所以我在玩堆栈溢出循环的想法。我输入了以下代码并在 Google Chrome 中获得了一张可爱的小图片(他们对 500 内部错误的回答,这对 Google 来说没有帮助!)。这是意料之中的事。

代码集 #2

<?php
    for($x=-1;$x<=3;$x++){
     echo $x/0.">";
    }
?>

通过检查我找到的标题:

http://server.domain/overflow.php

GET /overflow.php HTTP/1.1
Host: server.domain
User-Agent: Browser
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.0 500 Internal Server Error
Date: Thu, 22 Aug 2013 21:51:30 GMT
Server: Apache
X-Powered-By: PHP/5.3.3
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

我得到了上面的代码,因为我实际上想知道除以零以及 PHP 是如何处理它的。我编写了下面的代码来尝试触发结果,但没有得到我所期望的。问题不是从下面的代码中得到500 internal server error,而是得到别的东西......我希望服务器抛出错误的NULL

代码集 #1

<?php
    for($x=-1;$x<=3;$x++){
     echo $x/$x.">";
    }
?>

输出

1>>1>1>1>

问题

既然我除以零,为什么第一段代码不会导致 500 内部服务器错误? 1/1=1,1/0=500 Error,0/0=Null

【问题讨论】:

  • 检查您的服务器日志。当您收到服务器错误时,您会在那里找到它们。
  • 我从第二个代码集中看到了 500 错误。我从一开始就期待它,但只得到一个 NULL。
  • 好吧,你可能也有兴趣了解运算符优先级php.net/manual/en/language.operators.precedence.php
  • 这个问题似乎离题了,因为它是关于启用错误报告的。
  • ini_set('display_errors',1); error_reporting(E_ALL); 创造奇迹

标签: php divide-by-zero


【解决方案1】:

第一个版本出现错误,因为您有语法错误。 PHP 将0. 中的点视为小数点,而不是连接运算符。正确的代码是:

($x/0) . ">"; // This version is my preference

或者:

$x/0. . ">";

【讨论】:

  • 或仅用逗号分隔表达式。哦,对了,PHP 已经在错误消息中告诉你了。大声笑。
  • @hakre 这也适用于 OP,因为 echo 可以接受多个参数,但在字符串与数字文字连接的一般情况下,它可能不会,所以我把它省略了。
【解决方案2】:

你应该得到

Parse error: syntax error, unexpected '">"' (T_CONSTANT_ENCAPSED_STRING), expecting ',' or ';' in /your_file.php on line 3

将代码更改为

<?php
    for($x=-1;$x<=3;$x++){
     echo $x/0;
     echo ">";
    }
?>

会得到你

Warning: Division by zero in /your_file.php on line 3
>
Warning: Division by zero in /your_file.php on line 3
>
Warning: Division by zero in /your_file.php on line 3
>
Warning: Division by zero in /your_file.php on line 3
>
Warning: Division by zero in /your_file.php on line 3
>

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多