PhP4.2 mysql4 に関して

下記の間違いをおしえてください。
うまくいきません。
ロリポップを使っています

uplodeフォルダの中には
test01.gif
test02.gif
aaa.gif
bbb.gif
が入っています。
私の考えでは下記で、test01.gifとtest02.gifが表示されるべきだと思っています。(うまくいきません)

<?
$dir="/home/sites/lolipop.jp/users/lolipop.jp-dp0000/web/uplode/";

if( $handle = opendir($dir)) // ディレクトリハンドルを獲得
{
while(false !== $file=readdir($handle)) // ファイル名獲得
{
// test という言葉と一致したらfileを
if(mb_strpos($file,test)){
print("一致したファイル名".$file);
}
}
closedir( $handle ); // ディレクトリハンドルを閉じる
}

?>

詳しい方うまくいかない理由をお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/09/30 18:58:04
  • 終了:2007/10/07 19:00:21

回答(2件)

id:heppokoA No.1

heppokoA回答回数65ベストアンサー獲得回数72007/09/30 19:47:22

ポイント35pt

http://jp2.php.net/manual/ja/function.mb-strpos.php

mb_strpos() も strpos() もですが,1文字目から一致した場合はオフセットである 0 ( 0 は false として扱われる)を返すので,

if(mb_strpos($file,test)){ 
    print("一致したファイル名".$file);
}

のところで引っかからないで素通りしてしまうため,思った通りの出力が得られません。

id:studioes No.2

studioes回答回数522ベストアンサー獲得回数612007/09/30 19:55:34

ポイント35pt
<?php
$dir="/home/sites/lolipop.jp/users/lolipop.jp-dp0000/web/uplode/";

if( $handle = opendir($dir)) {
	while(false !== ($file=readdir($handle))) {
		if(mb_strpos($file,"test") !== false) {
			print("一致したファイル名".$file);
		}
	}
	closedir( $handle );
}
?>

mb_strpos() は、文字列 haystack の中で needle が最初に現れる位置を数字で返します。 needle が見付からなかった場合、FALSE を返します。

mb_strpos() は、 マルチバイト文字列に正しくマッチするように strpos() を拡張したものですが、 文字数は strpos() と同じく 1 文字単位で数えます。 needle の位置を haystack の先頭から順に数えていきます。 最初の 1 文字目の位置は 0 、2 文字目の文字は 1 という具合です。

 数値0の論理評価はfalseなので、先頭に一致すれば戻り値はfalseであるので、0test.gifはtrueであるが、test0.gifはfalseとなってしまいます。

 従って、型を含めた比較が必要です。

http://jp.php.net/mb_strpos

 また、演算子の優先順位にも注意してください。

id:rrr3

いつもありがとうございます。

訂正スクリプトありがとうございます。

とてもわかりやすかったです。

また次回もお願いします。

2007/09/30 21:06:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません