人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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 ); // ディレクトリハンドルを閉じる
}

?>

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

●質問者: rrr3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:AAA Dir GIF HOME JP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● heppokoA
●35ポイント

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

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

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

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


2 ● studioes
●35ポイント
<?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

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

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ