2008-09-09 22 views
1

誰もこの奇妙なことに遭遇しましたか?php is_dirは、存在しないフォルダの場合はtrueを返します

私のユニットテストの1つにいくつかのディレクトリが存在するかどうかチェックしています。 is_dirは、呼び出された時点でフォルダが存在しないにもかかわらず、真(1)を報告しています。

foreach($userfolders as $uf) { 
    $uf = sprintf($uf, $user_id); 
    $uf = ltrim($uf,'/'); 
    $path = trim($base . '/' . $uf); 

    $res = is_dir($path); //returns false except last time returns 1 
    $this->assertFalse($res, $path); 
} 

マシンはPHPバージョン5.2.4-2ubuntu5.3

物事私がチェックしているとUbuntu Linuxの8.04を実行している:コードは、(デバッグを容易にするために、いくつかの余分な中間VARSで)このようになります

- Paths are full paths 
- Same thing happens on two separate machines (both running Ubuntu) 
- I have stepped through line by line in a debugger 
- Paths genuinely don't exist at the point where is_dir is called 
- While the code is paused on this line, I can actually drop to a shell and run 

インタラクティブなPHPインタプリタと正しい結果を得る - パスはすべて256文字以下である - フォルダが存在しないため、権限の問題は想像できません!親フォルダは、ループ内の他のフォルダが欠落していると正しく報告されているため、アクセス権の問題を引き起こすことはできません。

is_dirでの奇妙な問題を指しているPHPドキュメントのコメントですが、この特定のものはありません。

私は「助けてください」と投稿しているわけではありませんが、同じことに遭遇した誰かがここで検索できるように、そしてうまくいけば誰かからの答えがこれを見ました!

答えて

3

これはあなたの問題を引き起こすとは思わないが、$ pathには末尾にスラッシュが付きます。

+0

素晴らしい。私の道には後ろにスラッシュがありませんでした。私はそれらに後続のスラッシュが必要であるとは思っていませんでした: - 私は習慣的に後にスラッシュを追加することは決してありません。同じテストセットでis_dirを他のすべての用途で使用していたのはOKですが(面白いことに、他の1つの使用法は、同じ存在しないフォルダ名で全く同じ方法で失敗しました)。 - また、PHPマニュアルのis_dirコード例では、後ろにスラッシュを使用していません。 - 確かに、後にスラッシュを必要とすることはできませんでした。それはis_dirテストのポイントをほぼ克服するものですか? –

+0

あなたはオーウェンズのことを知っていますか?あなたは絶対に正しいです。さらにテストでは、末尾のスラッシュをすべてのパスに追加すると、is_dirが動作することがわかります。非常に奇妙な行動。そして再び、SOはそれ自体が非常に貴重であることを証明します。したがって、要約すると、PHPでis_dirに奇妙な問題が発生している場合は、パスの末尾にスラッシュが付いていないか、またはis_readableに切り替えてください。 –

1

その価値については、is_readableを回避することができます。

0
$path = trim($base . '/' . $uf); 

これが原因である可能性があります。 $ baseが ''、 '。'、または '../'のようなものであれば、$ baseはあなたが探している何らかのルートフォルダだと仮定しています。私たちはあなたのforeachでどんな値を知っているかを知る必要があります。

[EDIT]

いくつかは、より多くの上記のコードを見て行うには、PHP 5.2でのOpenBSD 4.3上で正常に動作します。

+0

時間を割いてくれてありがとう。私は自分の道で予期せぬ価値観を見たことがなく、問題は特定の名前でしか上がらないかもしれないと思う。この場合、問題は、/ profileで終わるフォルダが存在しないことにあります。 驚くほどOwens氏の提案は、ボタンに強烈でした! –

関連する問題