- ベストアンサー
【file_exists】ファイルが存在するのに、存在しないとなります
いつもお世話になっております。 ■環境■ PHP5 Windows ■状況■ フォルダ内にtextファイルが20~45個入っております(個数は状況によって変わります)。 ■目的■ フォルダのtextファイルの中身を参照し、各textファイルに必ず含まれる数字を取り出す。でございます。 ■方法■ (1)フォルダにあるファイル名を取りだす (2)fopenで読み込み(r)で全部を見、数字を別ファイルに書き込む と考えたのですが、(1)で.、..というよくわからないファイルも一緒に出てきてしまったので、file_existsでファイルが存在するか確認してから(2)に移ろうとお思いました。 が、ファイル名は全部ないといわれてしまうのです。 しかしfile_exists($filename)の$filenameを表示させ、ブラウザにこぴぺするとtextデータは出てきます。 以下プログラムの一部です ※$cは(1)で得たフォルダ内にあるファイル名をループでまわしている値です for($b=0;$b<$a;$b++){ $filename="C:/Inetpub/wwwroot/php/kore/1/".$c; if (file_exists($filename)) { print "あるよ<BR>"; } else { print "ないよ<BR>"; } } 結果は(一部です) C:/Inetpub/wwwroot/php/kore/1/.text⇒ないよ C:/Inetpub/wwwroot/php/kore/1/..text⇒ないよ C:/Inetpub/wwwroot/php/kore/1/0155442A5.txt⇒ないよ C:/Inetpub/wwwroot/php/kore/1/01762602A.txt⇒ないよ です。 上記の C:/Inetpub/wwwroot/php/kore/1/01762602A.txt C:/Inetpub/wwwroot/php/kore/1/0155442A5.txt は確実に存在しております。 どこがおかしいのか、ご教授いただければ幸いです よろしくお願いいたします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
直接の回答ではありませんが、「.」や「..」という名前が出て来るということは、scandirやopendirしてreaddirでファイル名の一覧を取得しているということですよね。 一覧すべてを取得するのではなく、目的とするファイルのみ一覧で取得できるglobを使う方が便利ではないかと思います。たとえば glob("*.txt") を実行すれば、拡張子がtxtのファイルの一覧を返してくれます。 file_existsがtrueで返らない理由については、他の方もおっしゃっているとおり、まず渡しているファイル名が本当に思っているものなのかどうかを確認してみた方が良いと思います。ありそうなのは、$c にディレクトリ名の一部が入っている、とか。
その他の回答 (3)
- yasdon
- ベストアンサー率51% (28/54)
inetpubからではなく、"http://localhost/php/kore/1/0155442A5.txt" がfile_existsか?と聞いても結果は同じですか? もしくは同様にarray = file([URLでのファイル名]); で聞いても値は入ってますか? (ブラウザでは開くとお話されてますので) URLで直接聞いて値が有効であり、絶対パスで聞いて値が有効でない場合は、指定がおかしいのではと思われます。 また、実行時パスを事前に調べておいて、そこからの相対パスで指定したときにも同じ現象になるのか調べてみてもいいんじゃないですか? ケアレスっぽい気がします(^^;
お礼
回答ありがとうございます!! なるほどです。 相対パスの着眼点はありませんでした。。。 勉強になります! ありがとうございます。
- php504
- ベストアンサー率42% (926/2160)
ファイルパスからIISで動かしていると思われますがこの辺に原因があるかもしれません。 IISは使ったことないので詳しいことはわからないですが。
お礼
回答ありがとうございます。 おっしゃるとおりです。 アパッチが使えず致し方なくIISをつかっております。 回答者様に教えていただいてから、調べてみたら IISならではの不具合があるようですね。 その辺詳しく調べてみます。 ありがとうございます! 突破口が開けた気がします!
- php504
- ベストアンサー率42% (926/2160)
print "ないよ<BR>"; を print $filename . "⇒ないよ<BR>"; にして確認しては
お礼
回答いただきましてありがとうございます。 頂いたアドバイスのように行いましたが やはりファイルは存在するのに C:/Inetpub/wwwroot/php/kore/1/176933.txt ⇒ないよ となります。 ぜひともご教授よろしくおねがいいたします。
お礼
ご回答ありがとうございます! glob関数は知りませんでした。 ありがとうございます。 早速使ってみましたところ、見事にtxtのみ採取でき驚きです! さらにglobで得たファイル名をそのままfile_existsに入れてみると 「あるよ」になりました!!!! ありがとうございます!! 無事に解決になりました!!!