アプリ版:「スタンプのみでお礼する」機能のリリースについて

共有サーバーを利用していますが、

public_html/index.php より 一つ上のpublic_htmlの階層にあるimageフォルダの中のファイル(phpファイルとjpgファイル)にアクセスしたいのですが、phpファイルは読み込めるのですが、画像ファイルを読み込むことができません。原因が分かりません。もし何か気付きましたら教えてください。よろしくお願いします。( imgaeフォルダと画像ファイルのパーミッションは777にしています。phpファイルは644です。)

<!--index.php->
<?php
require_once("../image/HelloWord.php");
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TEST</title>
</head>
<body>
<img src="../image/HelloWorld.jpg"/>
</body>
</html>

A 回答 (7件)

> imageフォルダに同様に入れたHelloWorld.phpにechoでHello World> を書きましたが、それの場合は、public_html/index.phpのほうで読


> み込むと、表示される
当然です。
それはPHPとしてサーバ側の処理であって、HTMLがブラウザで解釈されてクライアントからアクセスされるURLとは別物です。

> 仮にバイナリーデータで得たものをHtmlに出力するという形になる
> と、どのような形が考えられますでしょうか?
画像ファイルのバイナリデータを表示する方法は、以下ページのような方法を取ります。
http://kaworu.jpn.org/kaworu/2008-04-06-1.php

ただし、当たり前ですが、画像の種類によってバイナリデータは異なりますし、その画像をバイナリデータとして表示するということは、そもそも公開して構わない情報ということになります。
また、jsファイルもファイル内容を読み込んで全てechoするというなんとも無意味な実装を取ることになります。
    • good
    • 0
この回答へのお礼

ありがとうございます。今回の目的とは異なりますが、違う場面で応用できると思いましたので、感大変謝します。知らないことが多いので、とても参考になります。

お礼日時:2016/04/27 01:02

答は出尽くしていると思いますが、基本はこれだけ


■共有サーバにはブラウザからみえるファイルと
見えないファイルがある。
■imgタグの画像はブラウザから取りに行くので
ブラウザから見えないファイルは表示できない。
■phpのrequire_onceによるファイル参照は
phpがサーバ側でファイルを読むということなので全く別の話

共有サーバであなたに与えられた公開用フォルダが
public_htmlなら、画像はその下に置かないと
駄目でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。PHPを今年に入ってから、勉強しているのですが、最近頭が、ごちゃごちゃになってきて整理する意味でも、まとめの返信に感謝します。たしかにこうして比較してみると、PHPがサーバー側でファイルを読むということと、ブラウザからファイルを読むという違いがあり、しっかりしたイメージで理解することができました。感謝いたします。

お礼日時:2016/04/27 01:17

因みに画像ファイルをバイナリで処理する典型的なパターンは、


特定のログインユーザーのプロフィール登録において、
画像ファイルのアップロードをした、などの場合です。
誰にでも公開していいものではありませんからね。

つまり、誰にでも公開していい画像ファイル、jsファイル、cssファイルは、
普通にwebroot直下のimage、js、cssディレクトリ内などに設置すべきです。
    • good
    • 0
この回答へのお礼

ありがとうございます。PHPは勉強の身なので、まだ浅く、最近、実験として、ちょうどプロフィール画面を作っていました。ちょうど画像をアップする部分を作っていまして、私の我流でのやり方ですと、アップする画像のファイル名をハッシュ化して、それにユーザーidを加えて区別していました。ちょっとやりかたがこれでいいのか迷っていたので、バイナリ処理に関しては非常に参考になります。

お礼日時:2016/04/27 01:10

> MVCモデル では、public_htmlの下の階層ではなく、同階層にフォル


> ダを配置して見えない場所で管理する手法がある
それはユーザーに直接参照させないビジネスロジックなどであって、
ユーザーに公開させる画像、jsファイルはいつも通りwebroot配下に
置きます。
htmlファイルに限ってのみ、テンプレートエンジンを利用するなどの
関係上、Viewとして構成され、非公開ディレクトリへ設置します。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。てっきり、public_htmlの階層で操作をするのだと思っていました。非公開ディレクトリというものの理解が間違っていただけに、大変参考になりました。調べて見ると、 .htaccessの設定などがあり、このあたりも弱いところなので、理解したいと思います。

お礼日時:2016/04/27 00:57

>>MVCモデル


では、レンタルサーバはunix系、pcはwindows。
src="../image/と言う書き方はpcのwindowsの書き方。
サーバならば、フォルダは階層に関係なく
/image/(/フォルダ名/)と書けばunix系のサーバで通用します。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。おっしゃるとおりPCはwindowsです。
サーバーに関する知識がないので、これを機会に勉強したいと思います。

お礼日時:2016/04/27 00:53

>>index.phpより一つ上のpublic_htmlの階層


1つ上じゃ無いよ。index.phpはpublic_htmlの階層にいる。

それより1個上を指してるんだから、共用サーバの、あなたの管理範囲外。だからアクセス出来る訳が無い。

/image/フォルダはpublic_htmlの下の階層のはず。
つまり、index.phpの下

<img src="../image/HelloWorld.jpg"/>

<img src="image/HelloWorld.jpg"/>
    • good
    • 0
この回答へのお礼

ありがとうございます。MVCモデル では、public_htmlの下の階層ではなく、同階層にフォルダを配置して見えない場所で管理する手法があるとのことなので、質問するに至りました。このあたりはレンタルサーバーによってもことなるのでしょうか?

お礼日時:2016/04/25 16:44

public_html


├index.php
└image
  └HelloWorld.jpg

という構成ならば、index.phpに記される画像パスは以下のいずれかでしょう。
・./image/HelloWorld.jpg
・/image/HelloWorld.jpg

/
├public_html
│└index.php
└image
 └HelloWorld.jpg
という構成の場合、imageディレクトリは、Web上で公開している
ディレクトリでないため、アクセスすることはできません。
どうしてもこうしたいならば、PHP側で一旦画像ファイルを読み込み、
バイナリを得た上で、それをHTMLに出力する、という形になると
思います。
    • good
    • 0
この回答へのお礼

2つの解説ありがとうござまいす。後者の説明が私の現状であります。
MVCモデル では、public_htmlの下の階層ではなく、同階層にフォルダを配置して見えない場所で管理する手法があるとのことなので、気になったもので、実験してみました。ただ、imageフォルダに同様に入れたHelloWorld.phpにechoでHello Worldを書きましたが、それの場合は、public_html/index.phpのほうで読み込むと、表示されるので、全てが禁止されているわけではないような気がしました。ただ画像だけがどうしても無理でした。
仮にバイナリーデータで得たものをHtmlに出力するという形になると、どのような形が考えられますでしょうか? もし知っていましたら、イメージだけでもお聞かせください。よろしくお願いします。

お礼日時:2016/04/25 16:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!