同サーバー内のファイルの存在確認ができません

このQ&Aのポイント
  • 同一サーバー内のファイルの存在確認ができない場合、file_existsを使用する際に相対パスではなく、絶対パスを指定する必要があります。相対パスでは階層の違いが原因でエラーが発生することがあります。
  • file_exists関数は、絶対パスまたはURLを指定してファイルの存在を確認するため、絶対パスを使用することで正しくファイルの存在確認ができます。
  • ただし、file_existsではファイルの読み書き権限も確認するため、指定したファイルが存在していても権限がない場合は結果がFALSEとなります。
回答を見る
  • ベストアンサー

同サーバー内のファイルの存在確認ができません

※説明の為相対パスで書かせていただきます。 ↓本ファイルの設置ディレクトリ /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
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

パーミッションが適切でないのでは?

papapa503
質問者

お礼

ありがとうございます。 そういえばいろいろ調べている際に、パーミッションというワードがチラホラ出てきました。パーミッション要チェックですね!

その他の回答 (2)

回答No.3

$img="/home/monky/www/monky.jp/img/1.jpg"; if(file_exists($img)){ print "{$img}は存在します"; } else{ print "{$img}は存在しません"; } この様な書き方ではどうですか?

papapa503
質問者

お礼

ありがとうございます。 三項演算子の書式には特にミスはないようです。

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

>※説明の為相対パスで書かせていただきます。 絶対パスの間違いですよね? 上の書き方なら正常です。 実際に書いている記述が間違っているからでは?

papapa503
質問者

お礼

ありがとうございます。 久々に相対絶対パスというワードを使ったので、おもいっきり逆のこと書いてしまってますね…。お恥ずかしいミスでありました。

関連するQ&A

  • PHP+ImageMagick

    exec("/usr/bin/convert -geometry 30x30 /usr/local/apache/htdocs/a/img/test.gif /usr/local/apache/htdocs/a/img/test2.jpg"); 上記プログラムをphp内に書く事によりimgフォルダ内にtest2.jpgが生成されるという認識は間違いでしょうか?エラーも出ませんが、新規画像も作成されません。

    • ベストアンサー
    • PHP
  • ファイルアップロードが出来ません。

    phpとApacheを利用して、ファイルのアップロードしたいのですが以下のようなエラーが出て上手くいきません。 エラー文 Warning: move_uploaded_file(C:\Program File\Apache Group\Apache2\htdocs\image\200708090925000.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\view.php on line 12 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\php11.tmp' to 'C:\Program File\Apache Group\Apache2\htdocs\image\200708090925000.jpg' in C:\Program Files\Apache Group\Apache2\htdocs\view.php on line 12 正常にアップロード処理されませんでした。 php.iniの設定はfile_upload=On upload_tmp_dir=NULL upload_max_size=2M です。 phpinfo()で確認したところ、upload_tmp_dirがno valueになっているのですが、設定が反映されていないのでしょうか? 参考までに作成したプログラムを載せておきます。 <HTML> <HEAD> <TITLE>PHPのテキスト</TITLE> </HEAD> <BODY> <?php $file_dir = 'C:\Program File\Apache Group\Apache2\htdocs\image\\'; $file_path = $file_dir.$_FILES["uploadfile"]["name"]; if(move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $file_path)){ $img_dir ="/image/"; $img_path = $img_dir.$_FILES["uploadfile"]["name"]; $size = getimagesize($file_path); ?> ファイルアップロードを完了しました。<BR> <IMG src="<?=$img_path?>"<?=$size[3]?>><BR> <B><?=mb_convert_encoding($_POST["comment"], "EUC-JP","SJIS")?></B><BR> <?php }else{ ?> 正常にアップロード処理されませんでした。<BR> <?php } ?> </BODY> </HTML> 原因が分かる方、ご意見よろしくお願いいたします。

    • 締切済み
    • PHP
  • htdocsとはなんでしょうか?

    こんばんは。 CentOS7+Apache+PHP5.6でWebページを作りたいと思います。 Linuxfは詳しくありません。 見よう見まねでなんとかphpinfo()まで辿り着けました。 PHPの本を見ながら作ってみようと思いますが、本がXAMPPをベースしていて ドキュメントルートがXAMPP/htdocsになっていました。 ただググるとXAMPPに限らずLinux側でも/usr/local/apache2/htdocsにしていたりするのが見られます。 私のインストールした環境では/usr/local/にはapache2もhtdocsもありません。 htdocsとはなんでしょうか? /var/www/htmlではなくhtdocsにしているのはなぜでしょうか。 もしPHPで利用しなければならない場合何か特別に設定が必要なのでしょうか。 上記についてよろしくお願いします。

  • PHP 画像のアップロードについて(move_uploaded_file)

    PHP初心者です。画像のアップロード機能を作成中です。 $path="/home/○○○/public_html/admin/w/p/5.jpg" move_uploaded_file($_FILES[MAINPHOTO]['tmp_name'], $path) で画像をアップしようとしたところ、次のエラーが出ます。 Warning: move_uploaded_file(/home/○○○/public_html/admin/w/p/5.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/○○○/public_html/admin/aaa.php on line 125 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phptC2x2A' to '/home/○○○/public_html/admin/w/p/5.jpg' in /home/○○○/public_html/admin/aaa.php on line 125 ローカルのadmin以下にw/pフォルダはきちんとあります。そこに5.jpgは存在してません。またアップする画像は別名です。 phpは4.2を使用しています。 サーバーはレンタルのkagoya.netを使用しています。 分かりやすい説明よろしくお願いします。

    • ベストアンサー
    • PHP
  • 空メールでPHPを起動

    CentOS 4.5、Apache 2.0.53、PHP 5.2.4+qmailで空メールのシステムを開発中ですが、Could_not_open_input_fileのエラーが出てPHPのプログラムが起動されません。 システムとしてはから空メール宛先用のユーザー321を追加し、/home/321/の.qmailを | /usr/local/bin/php -q /usr/local/apache2/htdocs_test/htdocs/mail_action2.php としてパーミションを600、所有者を321、stickyビットを立てています。ディレクトリー321も321所有で権限は700です。 呼ばれるmail_action2.phpはテスト用に #!/usr/local/bin/php -q <?php $fp = @fopen("/tmp/test.txt", "w"); $size = fwrite($fp, "xxx"); fclose($fp); ?> としています。所有者は321、権限は604、これもstickyビットを立てました。ディレクトリhtdocsは開発者所有、705の権限です。 これで321に空メールを送ると何も返答がなく、maillog上に greylist[31334]: IP nnn.nnn.nnn.nnn OK - accepting ... qmail: 1xx6.8xx4 delivery 1949: deferral: Could_not_open_input_file:_/usr/local/apache2/htdocs_test/htdocs/mail_action2.php_/ qmail: 1xx6.8xx5 status: local 0/10 remote 0/20 qmail: 1xx3.8xx0 starting delivery 1950: msg 1xx9 to local 321@abc.com qmail: 1xx3.8xx9 status: local 1/10 remote 0/20 qmail: 1xx3.8xx9 delivery 1950: deferral: Could_not_open_input_file:_/usr/local/apache2/htdocs_test/htdocs/mail_action2.php_/ qmail: 1xx3.8xx9 status: local 0/10 remote 0/20 と出ます。(文字数の関係からかなり省略しています。) mail_action2.phpは実行されず、/tmp/test.txtは作成されません。 ひとつ気になるのがSPAM対策としてgreylistを使っているのですが、多分このせいでCould_not_open_input_fileが2回出ていることです。これが影響しているのかもしれません。 どなたか他の方法でも結構ですからお知恵をお貸しください。

    • ベストアンサー
    • PHP
  • MovableTypeについて初心者的な質問です。

    MovableTypeでブログを作って書いているのですが それとは別に新しくブログを作成しようとおもうのですが、 新しいウェブログの作成 を選ぶと、 ローカル・サイト・パスと ローカル・アーカイブ・パスと アーカイブのURL が 今あるブログと同じパスを指しているのですが、このまま作成 しても良いのでしょうか? 今あるブログのアーカイブと混ざってしまうといった事は、ないでしょうか? 上記のように思ったので、あえてパスを変更して作成しようとしたところ、 ローカル・アーカイブ・パス への書き込みに失敗しました。 ファイル ローカル・アーカイブ・パス を開けません  とエラーが出ます。 ↓これ /usr/local/apache/htdocs/mt/****/archives.html.new への書き込みに失敗しました: ファイル「/usr/local/apache/htdocs/mt/****/archives.html.new」を開けません: No such file or directory ■設定では各設定パスに****をつけてみました。↓ ウェブログの名前 : **** ローカル・サイト・パス: /usr/local/apache/htdocs/mt/****/ サイトのURL: http://www.xxxxxxxxx.jp/****/ ローカル・アーカイブ・パス:/usr/local/apache/htdocs/mt/****/archives アーカイブのURL:http://www.xxxxxxxxx.jp/****/archives/ ■現在すでにあるブログの設定 ウェブログの名前 : ○○○○○○BLOG ローカル・サイト・パス: /usr/local/apache/htdocs/mt サイトのURL: http://www.xxxxxxxxx.jp/○○○○/ ローカル・アーカイブ・パス:/usr/local/apache/htdocs/mt/archives アーカイブのURL:http://www.xxxxxxxxx.jp/archives/ です。 単純にパスに****をつけたらよいというものではないのでしょうか? 教えてください!!

  • Apacheの設定について

    OSはRedhatLinux7.1 Apache_1.3.26 php-4.2.3 mysql-3.23.52 を使っています。 WebサーバにApacheを使っており、 今は /usr/local/apache/htdocs の下に直接ファイルやディレクトリを置いてブラウザから見ています。 しかし、例えば、 /home/master/public_html の下に置いてあるファイルやディレクトリもブラウザから見えるようにするにはどのようにすればよいのですか? apacheの設定を変えればよいのかなと思うのですが、どこをどのように変えればよいのかわからず困っています。 アドバイスお願いします。

  • web 上のファイルが存在するかチェックする方法

    php 5 を使用です。 自分のサーバーのファイルは file_exists($filename) でチェック出来ますが、 web 上のファイルが存在するか確認することは出来るのでしょうか? web 上のファイルというのは 自分のサーバーではないこういうものです。 http://www.example.com/images/pic01.jpg

    • ベストアンサー
    • PHP
  • session_start()を使うと警告メッセージが出ます。

    PHP4.2.2、apche1.3.27、VineLinux2.6を使っています。 PHPで、session_start()を使うと以下のような警告メッセージが出てしまいます。何かphp.ini内に、セッティングしないといけないことが あるのでしょうか? [ブラウザに表示されたメッセージ] Warning: Cannot send session cookie - headers already sent by (output started at /usr/local/apache/htdocs/a/a02.php:10) in /usr/local/apache/htdocs/a/a02.php on line 12 Warning: Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/a/a02.php:10) in /usr/local/apache/htdocs/a/a02.php on line 12 10 + 200 = 210 [実行したスクリプト] <html> <head> <title>aaa</title> </head> <body bgcolor="red"> <?php session_cache_limiter('private'); session_start(); $a = 10; $b = 200; $c = $a + $b; print("$a + $b = $c"); ?> </body> </html>

    • ベストアンサー
    • PHP
  • レンタル共用サーバーでのファイルのアップロードについて

    レンタル共用サーバーでのファイルのアップロードについて、 教えてください。 PHPが、セーフモードで動いているレンタルサーバーで、 ファイルのアップロードを行いたいのですが、 具体的には、どうやればよいのでしょうか。 ローカル環境でファイルアップロードを行っている書籍を、 参考にしているのですが、 ローカル環境から、レンタルサーバー環境への読み替えを どのように行えばよいのかが分かりません。 恐らく、ファイルの移動先($file_dir)を書き換えるのではないか、 と検討をつけたのですが、 ファイルのアップロード自体をやったことがないため、 どう書き換えればよいか分かりません。(絶対パス? 相対パス?) <参考にした書籍のコード抜粋> $file_dir = 'C:\Program Files\Apache Group\Apache2\htdocs\image\\'; $file_path = $file_dir . $_FILES["uploadfile"]["name"]; if (move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $file_path)) { <参考にしたサイト> http://z49.org/2009/04/03/199/

    • ベストアンサー
    • PHP

専門家に質問してみよう