> -----Original Message----- > From: Chris Hewitt [mailto:[EMAIL PROTECTED] > Sent: 03 April 2003 09:26 > To: Justin French
[snip] > > What I have done is to do the addslashes/stripslashes assuming > magic_quotes_runtime is off then force it off within my code > beforehand > with: > > if (ini_get('magic_quotes_runtime') == 1) > { > if (ini_set('magic_quotes_runtime','Off') == false) > { > echo "ERROR: Could not turn off > magic_quotes_runtime\n"; > } > } > > I found that ini_set would through an error if the seting was already > made, hence the initial check. So far this seems OK, but it was only > yesterday... Something bugged me about this code and comment when I very first read it, but it's taken an overnight cogitate to work out what it was. Dare I venture that your previous code, which sometimes appeared to throw an error, was simply: if (ini_set('magic_quotes_runtime','Off') == false) { echo "ERROR: Could not turn off magic_quotes_runtime\n"; } ? If so, there's a fundamental flaw here: as ini_set is defined to return the previous value of the setting, or FALSE if it fails, a simple equality comparison (==) to FALSE will succeed whenever the ini_set fails *or when the previous value was 0 (off)*. To echo your error only when ini_set() genuinely returns FALSE, you must do an identity comparison (===). <rant-ish> It can *never* be good practice to make an equality (==) or non-equality (!=) comparison with TRUE or FALSE. Not only is this bad style, but it is also inefficient. Consider: if ($x==TRUE) (where $x can be any arbitrary expression). PHP must first retrieve the value of $x, convert it to Boolean (giving TRUE or FALSE) and then compare it to TRUE -- yielding TRUE if $x was, er, TRUE and FALSE if $x was, duh, FALSE. That's a whole extra unnecessary comparison, plus some obfuscation for humans reading the code. So just use: if ($x) Taking the converse: if ($x==FALSE) this isn't quite so clear-cut. PHP will retrieve the Boolean value of $x (TRUE or FALSE), then compare it to FALSE, yielding TRUE if $x was FALSE, FALSE if it was TRUE. It's not immediately clear, but this comparison will usually be more expensive than just doing a Boolean not (!) on the expression. Stylistically, it's usually also clearer to read as if (!$x) -- IMO, it's better to have the clue that you're looking for the inverse value at the front, and read it as "if not $x". (Well, I suppose you could also write "if (FALSE==$x)", but personally I think that's just as bad as the other way round!) Finally, if you never have an == or != comparison to TRUE or FALSE, the rare occasion when you actually need to do an === or !== test will be very obvious and will alert someone reading the code (yes, even yourself several months later!) that something special is going on. </rant-ish> Cheers! Mike --------------------------------------------------------------------- Mike Ford, Electronic Information Services Adviser, Learning Support Services, Learning & Information Services, JG125, James Graham Building, Leeds Metropolitan University, Beckett Park, LEEDS, LS6 3QS, United Kingdom Email: [EMAIL PROTECTED] Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php