27
$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';

if(!strpos($filename, $match))
    {
    die();
    }
else 
   {
   //proceed
   }

上記のコードでは、ファイル名にテキスト文字列「my_upgrade」が含まれていない場合、スクリプトを終了しようとしています。ただし、この例では、「my_upgrade(1).zip」に文字列「my_upgrade」が含まれているため、停止することはありません。

私は何が欠けていますか?

4

8 に答える 8

59

strposfalse文字列が見つからない場合、および文字列が最初に見つかった場合に戻ります0恒等演算子を使用して、2つを区別します。

if (strpos($filename, $match) === false) {

ちなみに、この事実は公式文書に赤い背景と感嘆符で文書化されています。

于 2011-08-08T19:30:02.393 に答える
5
if (strpos($filename, $match) === false)

それ以外の場合は、(一致のインデックス)strposを返します。これはです。0false

演算子は変数の===型も比較します(ブール値!=整数)

于 2011-08-08T19:30:33.490 に答える
2
false === strpos($filename, $match)

strpos関数Docsは、false見つからない場合、または0位置で見つかった場合に返されます(プログラマーは頻繁0にカウントを開始するのが好きです)。0

警告この関数はブール値を返す場合がありますが、またはなどのと評価されるFALSE非ブール値を返す場合もあります。詳細については、ブール値のセクションをお読みください。この関数の戻り値をテストするには、演算子を使用します。FALSE0""===

于 2011-08-08T19:30:24.690 に答える
-1

この場合のstrposはゼ​​ロを返し、論理否定を行うとfalseとして解釈されます。ブール値を明示的に確認する必要がありfalseます。

于 2011-08-08T19:31:59.960 に答える