Bug #75980 [Opn->Nab]: greater or equal (formerly >=) is missinterpreted
| From: | jhdxr@php.net | Date: | Mon, 19 Feb 2018 13:18:29 +0000 |
| Subject: | Bug #75980 [Opn->Nab]: greater or equal (formerly >=) is missinterpreted | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-214032@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=75980&edit=1
ID: 75980
Updated by: jhdxr@php.net
Reported by: rolf at rolfjentsch dot de
Summary: greater or equal (formerly >=) is missinterpreted
-Status: Open
+Status: Not a bug
Type: Bug
Package: Scripting Engine problem
Operating System: windows 10 xamp
PHP Version: 7.2.2
Block user comment: N
Private report: N
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
> But a if(strpos($_SERVER['SERVER_ADDR'],"192.168.10") !< 0) still does
> what it does in previous versions
!< is an invalid operator in PHP, please double check the manual
(http://php.net/manual/en/language.operators.php) before you try to create something.
btw, rhsoft has already point out that you should read the manual to see how strpos
works, especially the warning message in red box.
Previous Comments:
------------------------------------------------------------------------
[2018-02-19 13:17:03] rolf at rolfjentsch dot de
well to make it a final
the problem only arrises when i start my php section with <?.
it does not occur when i start it with <?php
------------------------------------------------------------------------
[2018-02-19 13:11:06] spam2 at rhsoft dot net
so what is now with your wrong statement that >= finish interpreting?
> But a if(strpos($_SERVER['SERVER_ADDR'],"192.168.10") !< 0)
> still does what it does in previous versions
frankly i have no idea why one would write this code and what it is supposed to do!
strpos() either returns a integer which can be anything including 0 where 0 is the pretty clear fact
"haystack starts with needle"
in case needle don't exist in the string it returns a boolean false which is ducmented behavior
for decades - so the only correct code tests if the result is a boolean false and this MUST be done
with !== or === depending on the logic you implement
compare return values which can be 0 or boolean in weak mode is and always was wrong - that's
it - when your code for comparison is not strict PHP needs to implicit cast *one* of both values to
the type of the other which makes a 0 to false or false to 0 depending on the order and so the
result is just by luck
that's it - that didn't change
and completly off-topic assertions like >= stops interpreting making such bugreports even more
worse - there is no bug, your expectations are just wrong and with reading the documentation you
would not have written >= to start with
http://php.net/manual/en/function.strpos.php
Warning
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to
FALSE. Please read the section on Booleans for more information. Use the === operator for testing
the return value of this function.
------------------------------------------------------------------------
[2018-02-19 13:01:35] rolf at rolfjentsch dot de
Thank you for your hint with
- if(strpos($_SERVER['SERVER_ADDR'],"192.168.10") >= 0)
+ if(strpos($_SERVER['SERVER_ADDR'],"192.168.10") !== false)
But a if(strpos($_SERVER['SERVER_ADDR'],"192.168.10") !< 0) still does what
it does in previous versions
Wbr Rolf Jentsch
------------------------------------------------------------------------
[2018-02-19 13:00:44] spam2 at rhsoft dot net
> made it possible to have a <? ?> or <?php ?> anywhere in the source document
frankly you mix completly different topics to start with
<? ?> aka short-open-tags should not be used for many years
<?=?> got an exception indepdendent if short-open is allowed in config
> a normal if statement with a ">=" compare opertor finishes interpreting php
THIS IS NOT TRUE - PERIOD - otherwise the sample with you broken code won't reach the echo
statement at all and when you replace ">= 0" with a proper !== false it even works as
intended
[harry@srv-rhsoft:/downloads]$ php test.php
http://qnap/piwik/
[harry@srv-rhsoft:/downloads]$ cat test.php
<?php
$_SERVER['SERVER_ADDR'] = '192.168.196.0';
if (isset($_SERVER['SERVER_ADDR']))
{
if (strpos($_SERVER['SERVER_ADDR'],"192.168.10") >= 0)
{
$where="http://qnap/piwik/";
}
else
{
$where="https://someurlhere/";
}
} else $where="https://someurlhere/";
echo $where, "\n";
------------------------------------------------------------------------
[2018-02-19 12:54:59] rolf at rolfjentsch dot de
Formerly versions of php (like 5.6) made it possible to have a <? ?> or <?php ?>
anywhere in the source document.
Now with php 7 (actually tested on 7.2.2) a normal if statement with a ">=" compare
opertor finishes interpreting php. (As it would be expected when i had written "?>" )
On top - dont know if related to the above a function defined inside the <html> <body>
tag is not recognized as defined.
aamof i defined a function there definetly before its first usage and it does not work. moving it
before the <html> <body> tag solves the problem
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=75980
--
Edit this bug report at https://bugs.php.net/bug.php?id=75980&edit=1