- ベストアンサー
PHPの画像表示パス
お世話になります。 PHPでブラウザに画像を表示するときのパスについて質問させていただきます。 以下のようなコードで、画像のフルパスを使って画像を表示させようとしていますが、画像が表示されません。(添付スクリーンショットの左側)。 このコードの 第1行をコメントアウトして、第2行の相対パスでやると、画像がちゃんと表示されます。(右側) これはどうしてなのでしょうか?詳しい方がいらっしゃいましたら、よろしくご教授ください。 ちなみに、このファイル自体のパスは C:\xampp\htdocs\PHP7-solutions\new-test.php です。 <?php $selectedImage = "C://xampp/htdocs/php7-solutions/images/kinkakuji.jpg"; //$selectedImage = "images/kinkakuji.jpg"; if (file_exists($selectedImage) && is_readable($selectedImage)) { // && is_readable($selectedImage) $imageSize = getimagesize($selectedImage); echo "<pre>"; print_r($imageSize); echo "</pre>"; echo "<img src='".$selectedImage."' alt='kinkakuji temple' ".$imageSize[3].">"; }else { echo "no such file<BR>"; }
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
No.4です。 補足を拝見しました。 ローカルサーバー上の画像の場合、必ずしも "http://" は必要ありません。 $selectedImage = "C:/xampp/htdocs/PHP7-solutions/images/kinkakuji.jpg"; のようにしてお試しください。
その他の回答 (6)
- retorofan
- ベストアンサー率34% (435/1276)
No.4です。 補足を拝見しました。 >"C:\xampp\apache\conf\httpd.conf" の中でドキュメントルートを確認しましたが、以下のようになっています。 DocumentRoot "C:/xampp/htdocs" この部分を "HTTP://localhost" として、そのあとに "/php7-solutions/images/kinnkakuji.jpg" と続けて、つまり $selectedImage = "http://localhost/php7-solutions/images/kinkakuji.jpg"; とすれば、URLを指定したことになるわけですよね? 「php7-solutions」というディレクトリの記述が問題なのでは? ちなみに、画像ファイルを右クリックし、「プロパティ」を選択します。 表示されるウィンドウの「場所」欄に、そのファイルのフルパスが表示されます。 そこから、確実な画像ファイルの所在がわかります。
補足
画像のプロパティーを確認しました。 C:\xampp\htdocs\PHP7-solutions\images となっています。 これを表示画面からコピペして\を/に直し、C:/xampp/htdocs をHTTP://localhost に入れ替えて実行しましたが、何も変わりません。
- retorofan
- ベストアンサー率34% (435/1276)
No.4です。 前述のコードはhttp://localhostがドキュメントルートである ことを前提としています。 (この場合はC://xampp/htdocs/) これで正常に画像が表示されないということは、 ドキュメントルートが異なっているか、 画像のアドレスのみルートが異なっている場合に限られます。 その辺りは、適宜修正してください。
補足
"C:\xampp\apache\conf\httpd.conf" の中でドキュメントルートを確認しましたが、以下のようになっています。 DocumentRoot "C:/xampp/htdocs" この部分を "HTTP://localhost" として、そのあとに "/php7-solutions/images/kinnkakuji.jpg" と続けて、つまり $selectedImage = "http://localhost/php7-solutions/images/kinkakuji.jpg"; とすれば、URLを指定したことになるわけですよね? でも実行してみると、これではif 文さえも無視されて、"no such file" が表示されます。 しかし、このURLをブラウザのアドレス欄に入れると、ちゃんと画像が表示されます。まったく訳が分かりません。 どうかお知恵を貸してください。
- retorofan
- ベストアンサー率34% (435/1276)
PHPで画像を表示する際には、 ブラウザがアクセスできるURLを指定する必要があります。 そのため、ローカルファイルパス C://xampp/htdocs/php7-solutions/images/kinkakuji.jpg を直接指定すると、ブラウザはそのファイルにアクセスできません。 この場合、 http://localhost/php7-solutions/images/kinkakuji.jpg のようにすれば、ブラウザはこのURLから画像を取得できます。 (その筈です)
お礼
ご回答ありがとうございます。 以前のお礼にも書きましたように、画像のURLを次のようにしても画像は表示されませんでした。 (画像パス)HTTP://localhost/php7-solutions/images/kinkakuji.jpg (スクリプトの位置)C://xampp/htdocs/php7-solutions/new-test.php これは今回、回答者さんがお示しいただいて居るのと全く同じです。 これで表示されないのですから不思議です。 もしかすると私のPCでのPHPの設定に関係するのではないでしょうか? 何か大事なものの設定を間違っているとか? 何かヒントはないでしょうか? 長い時間にわたってご迷惑をおかけしていて、誠に心苦しいですが、何かヒントがあれば教えてください。
- asciiz
- ベストアンサー率70% (6803/9674)
>具体的にどう書けばよいのかを教えていただけるとありがたいです。 あなたはPHPプログラムを、どのように呼び出していますか? それが分からないので、回答#2では >ファイルが C://xampp/htdocs/php7-solutions/test.php ではないかと予想し、 >「http://localhost/php7-solutions/test.php」というURLでアクセスしているとき、 と、2つも仮定を入れて説明してあります。 あなたがアクセスしているphp実行のURLに、合わせなければいけません。 どうなっていますか?
補足
回答者さんの仮定されている通り、私のphpプログラムの呼び出しは次の通りです。 http://localhost/php7-solutions/new-test.php しかしブラウザのアドレス欄には "http://" 省略されて、"localhost/" 以降のものになります。
- asciiz
- ベストアンサー率70% (6803/9674)
PHPで指定する画像パスは、「URL」でなくてはなりません。 「C://xampp/htdocs/php7-solutions/images/kinkakuji.jpg」と言う文字列をURLとして解釈すると、 ・プロトコルは(httpやhttpsでなく)「C」 ・アクセスするサーバ名は xampp ・ファイルパスはルートから /htdocs/php7-solutions/images/kinkakuji.jpg と言うファイルを取得しようとすることになります。 つまり、全くのでたらめな場所にアクセスしてしまう訳です。 現在コメントアウトしてある相対パス「images/kinkakuji.jpg」だとOKなのは、このPHPファイルが C://xampp/htdocs/php7-solutions/test.php だとして、 「http://localhost/php7-solutions/test.php」というURLでアクセスしているとき、画像ファイルへ 「http://localhost/php7-solutions/images/kinkakuji.jpg」というURLでアクセスすることになるため、表示できるのです。 ローカルファイルを表す file:// と言うURL記法で表示できる場合はありますが、出来ない場合もあります(ブラウザによる)。 まあ、基本的にPHPからローカルのファイルシステムに直接アクセスするのは推奨できません。 ※サーバサイドPHPではローカルファイルへのアクセスも書くことがありますが。 httpサーバが動いていて、URL指定で目的のファイルを指定することが基本となります。
お礼
早速のご回答、有難うございます。 URLで指定するとは、具体的にはどのようにするのでしょうか?以下のようにやってみましたが、表示されません。 "http://localhost/php7-solutions/images/kinkakuji.jpg" 具体的にどう書けばよいのかを教えていただけるとありがたいです。
- garo1970
- ベストアンサー率54% (60/111)
詳しくないのですが、 xamppでの絶対パスの書き方が間違っているのでは? $selectedImage = "C://xampp/htdocs~ のところ :の後のスラッシュは1個でいいようですし、 ちょっと調べてみたところ、ローカル環境の場合はfileスキームという書き方で file:///C:/xampp/htdocs~ と書くという解説がありました。
お礼
早速にご回答をいただき、有難うございます。 ファイルパスを "file:///C:/xampp/htdocs/php7-solutions/images/kinkakuji.jpg" としてやってみましたが、それでも表示されません。また何かヒントがあれば教えてください。
お礼
長い間お付き合いいただき、有難うございました。 $selectedImage = "C:/xampp/htdocs/PHP7-solutions/images/kinkakuji.jpg"; は、私が最初に使った方法で、画像が表示されないものでした。もうこれ以上に回答者さんのお時間を無駄にしたくありませんので、この件については相対パスを使って進めて行くことにして、この質問は一応閉めさせていただきたいと思います。 相対パスの images/kinkakuji.jpg なら必ず表示されますので。 どうも色々と有難うございました。