Bug #75980 [Opn->Nab]: greater or equal (formerly >=) is missinterpreted

From: 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

« previous php.bugs (#214032) next »