$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
if(!strpos($filename, $match))
{
die();
}
else
{
//proceed
}
上記のコードでは、ファイル名に「my_upgrade」というテキスト文字列が含まれていない場合、スクリプトを終了しようとしています。ただし、指定された例では、「my_upgrade(1).Zip」には文字列「-my_upgrade」が含まれているため、停止することはありません。
私は何が欠けていますか?
strpos
は、文字列が見つからない場合はfalse
を返し、0
最初に見つかった場合。 identity operator を使用して、2つを区別します。
if (strpos($filename, $match) === false) {
ちなみに、この事実は 公式ドキュメント に赤い背景と感嘆符で文書化されています。
strpos()
関数は大文字と小文字を区別します。
_if(strpos($filename, $match) !== false)
{
// $match is present in $filename
}
else
{
// $match is not present in $filename
}
_
大文字と小文字を区別しない場合 use stripos()
つまり、文字列が別の文字列内で最初に出現する位置を検索します(大文字と小文字を区別しません)
if (strpos($filename, $match) === false)
それ以外の場合、strpos
は0
(一致のインデックス)、つまりfalse
を返します。
===
演算子は変数のタイプも比較します(ブール!=整数)
false === strpos($filename, $match)
strpos
関数ドキュメント は、見つからない場合はfalse
を返すか、0
位置に見つかった場合0
(プログラマーは0
頻繁に):
Warningこの関数は、ブール値
FALSE
を返す場合がありますが、FALSE
に評価されるブール値以外の値を返す場合もあります。といった0
または""
。詳細については、ブールに関するセクションを参照してください。使用===
この関数の戻り値をテストするための演算子。
いくつかの状況で他のすべてが失敗したときにこれは私のために働いています:
$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
{
$checker == true;
}
if ($checker === false)
{
die();
}
else
{
//proceed
}
または要するに:
$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
{
$checker == true;
//proceed
}
if ($checker === false)
{
die();
}