2011-07-19 12 views
1

文字列を含むファイルがサーバー上のすべてのファイルを検索するPHPファイルを持っています。 strpos()で検索用語をハードコードするとうまく動作します。私は$文字列を使用しようとすると、それは動作しませんファイルを検索するときにphp strposが正しく動作しない

works: 
$file = file_get_contents($dir); 
if(strpos($file, 'find me')) 

does not work: 
$findme='find me'; 
$file = file_get_contents($dir); 
if(strpos($file, $findme)) 

アイデア?

編集:if(strpos($ file、 'find me')!== false)は動作しません。

は解決:(strpos($ファイル、「$のfindme」))なら、私はチック でなければなりません見つける

+2

0インデックスの一致として 'if(strpos($ file、$ findme)!== false)'をチェックするとfalseになります。 (ドキュメントの[警告](http://php.net/manual/en/function.strpos.php#refsect1-function.strpos-returnvalues)に注意してください) –

+0

私はそれを試してみました。私も試しました!strpos() $ fileと$ findmeはどちらも文字列として扱われていないようですが、str_replaceがある別の領域で同様の問題が発生していますが、置換えの用語をハードコードしない限り動作しません。 –

+0

[この関数のPHPのドキュメント] (http://php.net/manual/en/function.strpos.php)?戻り値の型には赤い旗が付いています。 – Shef

答えて

1

まあ、私に出て飛躍最初のものを誤って使用strposを使用しているということです。 if(strpos($file, 'find me') !== false)if(strpos($file, $findme) !== false)を行う必要があります。

3

ファイルが

0

を「私を見つける」warning in the docsで始まる場合strpos($file, 'find me')は0かもしれないので、あなたは、if(strpos($file, 'find me') !== false)をテストする必要がありますが、明示的なfalseを探し、ちょうど状態で機能を置くべきではありません言及します。 strposは潜在的に0または""(どちらもfalseと評価されます)を返す可能性があるため、条件自体が失敗する可能性があります。

代わりに以下のことを試してみてください。

if(strpos($file,$findme) !== false) 

またあなたはこれを試したし、それはまだ失敗だと言っている場合は、干し草の山は確かにその情報が含まれていないことを確認するvar_dump($file)を実行してみてください検索する

+0

私はスクリプトが自分自身を検索し、それが結果の1つとして表示されるので、文字列が含まれていることは確かです。 $ findmeを使用すると結果は全くありません –

+0

@johnnyCraig:(通常の条件の場合)文が完璧に実行されるため、何かが '$ file'や' $ findme'のどれかに怪しいです。 –

+0

問題ではなく、 '$ findme'にはっきりとあります(結局のところ、検索は干し草ではなく、変化するものです)。 – Wrikken