$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';
if开发者_高级运维(!strpos($filename, $match))
{
die();
}
else
{
//proceed
}
In the code above, I'm trying to die out of the script when the filename does not contain the text string "my_upgrade". However, in the example given, it should not die since "my_upgrade(1).zip" contains the string "my_upgrade".
What am I missing?
strpos
returns false
if the string is not found, and 0
if it is found at the beginning. Use the identity operator to distinguish the two:
if (strpos($filename, $match) === false) {
By the way, this fact is documented with a red background and an exclamation mark in the official documentation.
The strpos()
function is case-sensitive.
if(strpos($filename, $match) !== false)
{
// $match is present in $filename
}
else
{
// $match is not present in $filename
}
For using case-insensitive.
use stripos()
that is it finds the position of the first occurrence of a string inside another string (case-insensitive)
if (strpos($filename, $match) === false)
Otherwise, strpos
will return 0
(the index of the match), which is false
.
The ===
operator will also compare type of the variables (boolean != integer)
false === strpos($filename, $match)
The strpos
functionDocs returns false
if not found or 0
if found on position 0
(programmers like to start counting at 0
often):
Warning This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
, such as0
or""
. Please read the section on Booleans for more information. Use the===
operator for testing the return value of this function.
strpos
returns false
if the string is not found, and 0
if it is found at the beginning.
so try this:
if (strpos($filename, $match) === false) {
conditon
}
Note we use a strict comparison (===
) If we don't, both types (false
and false
or an integer) will be coerced to the same type, and 0
when coerced to a bool is false
.
more details: https://zdevtips.com/guid/strpos-in-php-example4-example-codes/
This working for me when everything other fail in some situations:
$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
{
$checker == true;
}
if ($checker === false)
{
die();
}
else
{
//proceed
}
Or in short:
$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
{
$checker == true;
//proceed
}
if ($checker === false)
{
die();
}
$data = 'match';
$line = 'match word in this line';
if(strpos($line,$data) !== false){
echo "data found";
}else{
echo "no data found";
}
strpos in this case will return a zero, which is then interpretted as false when you do the logical negation. You should check explicitly for the boolean false
.
精彩评论