$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
if(!strpos($filename, $match))
{
die();
}
else
{
//proceed
}
Dans le code ci-dessus, j'essaie de désactiver le script lorsque le nom du fichier ne contient pas la chaîne de texte "my_upgrade". Cependant, dans l'exemple donné, il ne devrait pas mourir, car " my_upgrade (1) .Zip " contient la chaîne " my_upgrade ".
Qu'est-ce que je rate?
strpos
renvoie false
si la chaîne n'est pas trouvée et 0
si elle se trouve au début. Utilisez le opérateur d'identité pour distinguer les deux:
if (strpos($filename, $match) === false) {
Au fait, ce fait est documenté avec un fond rouge et un point d’exclamation dans la documentation officielle .
if (strpos($filename, $match) === false)
Sinon, strpos
retournera 0
(l'index de la correspondance), qui est false
.
L'opérateur ===
comparera également le type des variables (boolean! = Integer)
La fonction strpos()
est sensible à la casse.
if(strpos($filename, $match) !== false)
{
// $match is present in $filename
}
else
{
// $match is not present in $filename
}
Pour utiliser la casse. use stripos()
qui trouve la position de la première occurrence d'une chaîne dans une autre chaîne (insensible à la casse)
false === strpos($filename, $match)
La fonction strpos
Docs retourne false
s'il n'est pas trouvé ou 0
s'il est trouvé à la position 0
(les programmeurs aiment commencer à compter à 0
souvent):
Warning Cette fonction peut renvoyer Boolean
FALSE
, mais peut également renvoyer une valeur non-booléenne évaluée àFALSE
, telle que0
ou""
. Veuillez lire la section sur les booléens pour plus d'informations. Utilisez l'opérateur===
pour tester la valeur de retour de cette fonction.
Cela fonctionne pour moi quand tout autre échoue dans certaines situations:
$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
{
$checker == true;
}
if ($checker === false)
{
die();
}
else
{
//proceed
}
Ou en bref:
$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
{
$checker == true;
//proceed
}
if ($checker === false)
{
die();
}