• 締切済み

file_exists関数について

file_exists関数を使っていますが、 指定した場所にファイルは存在するにもかかわらず、 Falseが戻ってきてしまいます。 WinXp PHP5 の環境で、ローカルにて行っています。 ファイルはc:commoninit.ini というファイルです。 同パスにinit.iniをおいているのですが。 なにか条件があるのでしょうか。 ご教授願います。

  • PHP
  • 回答数4
  • ありがとう数2

みんなの回答

回答No.4

file_exists関数は、open_basedir外ではダメみたいですよ。 私もこの辺りで苦戦した経験があり、結局ルートディレクトリ外をopen_basedirに追加したら出来ましたから。

bassar
質問者

お礼

大変遅くなってしまい申し訳ありませんでした。 maenet1972さん なるほど、open_basedir外はだめなんですね。 これですっきりしました! ありがとうございました。

  • fire--
  • ベストアンサー率49% (146/293)
回答No.3

No.1です。 WinVistaBussiness XAMPP (basic package) version 1.6.4 + Apache 2.2.6 + MySQL 5.0.45 + PHP 5.2.4 + PHP 4.4.7 + PEAR で試してみましたが、問題ないですね。 こういう時に、意外とあるのは、思い込みでつづりが違っているのを見逃していたなんて事です。 残念ながら、これ以上は思いつきませんね。

bassar
質問者

お礼

fireさん ありがとうございました。 つづり間違いはなかったのですが、maenet1972さんに いただいたご回答で解決しました。 お礼が遅れてしまって済みませんでした。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

「C:のカレントフォルダ」は、貴方が予想しているフォルダとは違うフォルダを指しています。

bassar
質問者

補足

ご回答ありがとうございます。 質問の内容が誤表記になってしまっていました。 すみません。 現在、 $filename= "c:/common/init.ini"; と記述しており、 Cドライブのcommonフォルダの下にinit.iniを おいてあるのですがFalseが戻ってきてしまっています・・。 ただ、その後いろいろいじってみると、 file_existsの戻り値を無視し、 $fp = fopen($filename, "r"); を記述してみると、正しくオープンされ、 ファイルの内容は取得できているのですが・・。 if(!$fp)でファイルのオープンチェックを行っているので、 ファイルがなければここでエラーになるのですが、 file_exists関数が正しく動作しないのが気になっています。

  • fire--
  • ベストアンサー率49% (146/293)
回答No.1

c:の後に、/ はなしでしょうか? だとしたら、PHPを動かしている所からの相対パスで見ていると 思いますよ。 あと、2重投稿になっているようなので、もうひとつは削除するほうが良いですね。

bassar
質問者

補足

ありがとうございます。 chie65536への回答にも書かせていただきました通りの現象が 起こってしまっています・・。 アドバイスをお願いいたします。 >あと、2重投稿になっているようなので、もうひとつは削除するほうが良いですね。 ご指摘ありがとうございます。修正いたします。

関連するQ&A

  • CekePHPでfile_exists関数を使う

    CakePHP Ver1.3.6で開発をしています。 アクションの中で、画像の存在判定にfile_exists関数を使ったのですが、 2バイトのファイル名のファイルの場合、存在するファイルがfalseになって しまいます。 対象のファイルが存在するときに、 if (file_exists('img/漢字.jpg')) echo 'あります'; else echo 'ありません'; if (file_exists('img/filename.jpg')) echo 'あります'; else echo 'ありません'; このとき、前者は’ありません’、後者は’あります’と表示されます。 app/webrootフォルダにtest.phpを作り、その中で同じ判定をすると、 両方とも’あります’と表示されます。 なぜアクションの中に記述したときのみ、2バイトファイル名を正しく 判定できないのでしょうか?

    • ベストアンサー
    • PHP
  • PHPのfile_exists関数について

    file_existsで特定のフォルダにファイルが存在するかどうかを調べたいのですが、 フォルダの中にあるファイル数が大量の場合、負荷はファイル数に応じて大きくなるんでしょうか? たとえば、ファイルが5万件ある場合でも、file_exists関数は問題なく使えるんでしょうか? あるいは、mysqlなどのデータベースを利用した方が賢明でしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • file_existsでファイル名の部分一致で検索

    PHPの勉強中なのですが、指定フォルダにあるファイルを、部分一致で存在チェックしたいのですが、file_existsでは、正規表現とかは使えないのでしょうか? それとも、readdirでファイル一覧を取得して、そこから検索して存在チェックするのでしょうか?

    • ベストアンサー
    • PHP
  • 同サーバー内のファイルの存在確認ができません

    ※説明の為相対パスで書かせていただきます。 ↓本ファイルの設置ディレクトリ /usr/local/apache/htdocs/admin/check.php $img="/home/monky/www/monky.jp/img/1.jpg"; $chk=(file_exists($img))?TRUE:FALSE; ↑とするとエラーがでました。 このPHPとIMGファイルは以下のように、 /usr/local/apache/htdocs/admin/check.php /home/monky/www/monky.jp/img/1.jpg 階層が全然違いますが、同サーバー内です。 fopenやfile_get_contentsなどURLで指定すれば存在確認ができたのですが、動作が遅すぎなので、なんとかfile_existsで行いたいです。 この場合はどうすればうまくいくのでしょうか??

    • ベストアンサー
    • PHP
  • file_existsが動作しない

    お世話になります。 $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } という形で画像ファイルが存在するかを調べているのですが、PHPに直接記述した場合動作し、functionの中に入れると動作しなくなるのはなぜでしょうか? function pict($test){ $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } return $var; } 上記のfunction内に入れた場合、returnの値が「ないよ!」になってしまうのです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 【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 は確実に存在しております。 どこがおかしいのか、ご教授いただければ幸いです よろしくお願いいたします

    • ベストアンサー
    • PHP
  • function_exists関数の挙動について

    以下のphpのコードを実行すると、 「hogehoge()関数が定義済みです。」とブラウザに表示されます。 ですが、スクリプトは上から下へ向かって実行されるわけで、 <if(function_exists('hogehoge'))>の箇所では、hogehoge関数はそんざいしないのでfalseに なると思うのです。 いったいどういう理屈なんでしょうか? よろしくお願い申し上げます。 (なお、下記ソースではタブを全角空白4文字に変換しています) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>関数が定義済みか調べる</title> </head> <body> <div> <?php if(function_exists('hogehoge')){     echo 'hogehoge()関数が定義済みです。'; }else{     echo 'hogehoge()関数は未定義です。'; } function hogehoge(){} ?> </div> </body> </html>

    • ベストアンサー
    • PHP
  • phpで扱えるファイルサイズ

    お世話になります。 以下の環境で2GBを越えるファイルを対象にfile_exists()やis_file()関数を使うと正常に判定してくれません(ファイルが存在していてもFalseが返る)。コンパイルのオプションやPHPのバージョンアップで解消できるでしょうか?また、他に影響がありそうな関数がありましたら示して頂けると助かります。 <環境> FedoraCore4 (kernel 2.6) php 5.0.4

    • ベストアンサー
    • PHP
  • PHP CLIでのphp.iniのパスを設定したい

    CLIモードで読み込まれるphp.iniのデフォルト値(/usr/local/lib)を「php -c path/file」を使わず、インストール時のconfigureオプションなどで指定することは可能なのでしょうか? 環境 CentOS 6.0 PHP5.3.9 (変な場所にインストールされているのは、他の開発環境もあるので隔離するためです。) configure時オプション --prefix=/home/user/local/php --with-config-file-path=/home/user/local/php/lib/ ↑これで自動的に/home/user/local/php/lib/php.iniが読み込まれると思ったのですが $ /home/user/local/php/bin/php -v PHP 5.3.9 (cli) (built: Jan 17 2012 17:22:45) $ /home/user/local/php/bin/php -i Configuration File (php.ini) Path => /home/user/local/php/lib/ Loaded Configuration File => /usr/local/lib/php.ini  なぜかデフォルト(/usr/local/lib/php.ini)が読み込まれてしまう $ /home/user/local/php/bin/php -c /home/user/local/php/lib/php.ini -i Configuration File (php.ini) Path => /home/user/local/php/lib/ Loaded Configuration File => /home/user/local/php/lib/php.ini  cオプションで指定するともちろん問題なし ちなみにブラウザで見るとConfiguration File (php.ini) PathとLoaded Configuration Fileが等しくなっています。 apacheのhttpd.confに PHPIniDir "/home/user/local/php/lib/" を記載しているからだと思いますが。 www.sample.com/index.php Configuration File (php.ini) Path/home/user/local/php/lib/ Loaded Configuration File/home/user/local/php/lib/php.ini

    • ベストアンサー
    • PHP
  • php初心者です。宜しくお願い致します。

    php初心者です。宜しくお願い致します。 動作環境はwindowsXPです。 windows上に配置された日本語のファイル名を持つファイルをphpから処理したいと思っています。 たとえば、 if (!file_exists(mb_convert_encoding($path_file,"SJIS","auto"))) {・・・というようにまずファイル存在チェックを行うなど。 上記例では$path_fileはUTF-8で格納しているため、windowsに合わせSJISにエンコーディングしています。 $path_fileにはフルパスを指定し、大抵の日本語ファイルは読み込めるのですが、いわゆる5C問題に該当する、「表紙.pdf」「予定.txt」など、特定文字を含む日本語ファイル名が読めません。上記file_existsを行うと、存在するのに「存在しない」と判定されてしまいます。 不思議なのは、scandirして指定フォルダ内全てのファイル名を一括取得し配列へSJISで格納した後、そのまま配列の値をもってfile_existsしてみると、上記特定文字を含む日本語ファイル名だけ「存在しない」と判定されてしまいます。 ちなみにscandirした結果をUTF8に変換しブラウザに表示させてみると「表紙.pdf」「予定.txt」と正しく表示され、「表\紙.pdf」「侮・.pdf」等のように化けないです。 php.iniの「magic_quotes_gpc」はOffとなっています。 file_existsだけでなく、fopen、readfileなど含め、正しく処理できるようにするためにはどうすればよいのでしょうか、ご教授いただけると幸いです。

    • 締切済み
    • PHP

専門家に質問してみよう