dポイントプレゼントキャンペーン実施中!

例えば、掲示板(bbs)モジュールがあったとして
複数のアプリケーションから利用できるとします。

┬ myproject
│├ application1
││├ controllers
│││└ helpers
││├ models
││├ views
│││└ scripts
│├ application2
││├ controllers
│││└ helpers
││├ models
││├ views
│││└ scripts
│├ modules
││├ bbs(掲示板モジュール)
│││├ controllers
││││└ helpers
│││├ models
│││├ views
││││└ scripts
││├ mail(メールモジュール)
│││├ controllers
││││└ helpers
│││├ models
│││├ views
││││└ scripts
│├ data
│├ library
│├ public 公開層(ドキュメントルート)
││├ css
││├ images
││├ .htaccess
││└ index.php

上のようなディレクトリ構成で、
掲示板モジュールには画像を使用しているのですが
その画像はpublicフォルダ内のimagesフォルダに置くしかないのでしょうか?
公開してる画像フォルダがそこしかないので当然じゃないかと思われるでしょうが、
自分としては掲示板モジュールはその名前の通り、どんなアプリケーションからも
再利用可能で、画像だけ掲示板モジュールフォルダ外に置くのは違う気がするというか・・・
例えば掲示板モジュールで使うコントローラとかモデルとかは掲示板モジュールフォルダ内にある(つまり独立している)のに
画像だけ切り離しができないわけですが、なんとかならないでしょうか?

A 回答 (7件)

No.5でhonoka-chaさんが言っているような感じで設定すれば良いのではないでしょうか。


module内に存在するコントローラは、何らかの方法でFrontControllerから呼び出し可能なんですよね。

であれば、ImagesControllerというものを設置して、
必要なリソースを常に返すようにしてやればよいのではないでしょうか。

例えば、

class ImagesController extends Controller{

function img($name){

if(file_exists("modules/views/images/$name"){

echo file_get_contents("modules/views/images/$name");

}


}

}

とか。
そうすればWebのルートに置いてある.htaccessもそのまま利用出来るので良いのではないでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
そのやり方を試してみたのですが、できました。
ありがとうございます。
ImagesControllerを設置するというのはなかなか良さそうなのですが、
hogehoge78さんはこの掲示板モジュールのようなデフォルトの画像を必要とする
モジュールを設計したり利用したりしたことはあるのでしょうか?
もしそうだとしたら、このやり方のデメリット(例えばセキュリティ的に問題あるとか)
などありましたら教えてもらえないでしょうか?

お礼日時:2010/08/16 05:01

私自身は、フレームワークのモジュールやプラグインとしてアプリケーションを構築したことはないです。



ただ、Webアプリケーションのフレームワークのビューは、必ずしもHTMLであるわけではなくて、それ以外のリソースも表示することが出来ます。(RSSやJS、CSSとかも)

なのでそれで問題ない気はします。

しかし、デメリットとして、存在する実態に対してただ単に出力を行うだけなのにフレームワークのルーティングやコントローラなどをロードするので重くなる、ということが挙げられます。

そもそも負荷が少ないサイトであれば気にするほどではないと思いますが、アクセス数が増えればボトルネックになります。

その場合には、Webルート以下に実態を置くようにする。
例えば、
http://www.example.com/your_module/images/hoge.jpg
というものがあった場合、よくあるFrontControllerを配するフレームワークであれば、
実際にWebルート以下に、「/webroot/your_module/images/hoge.jpg」というデータを配置すれば、
そのデータを優先して読むように設定されているかと思いますので、imagescontrollerを読みに行かないので、とくに設定を替えなくても負荷は軽減されます。

といったことを、不特定多数に公開する場合は、ReadMeファイルかなんかに書いてあげればよいのではないかなと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
たしかに画像がたくさんあったらあまり良くないかもしれませんね。
まあでも考えうる限りでは最善の方法だと思うので
あとは状況に応じて作り分けていきたいと思います。

お礼日時:2010/08/17 02:07

│├ modules


││├ bbs(掲示板モジュール)
│││├ controllers
││││└ helpers
│││├ models
│││├ views
││││├ scripts
│││││└ image001.php
││││└ images
││││ └ image001.jpg

みたいにしてimagesフォルダを抱え込む。画像を使うときはpublic下のプログラム
からimage001.phpを呼び出し、それがimage001.jpg表示の役割をする、という策を
今思いつきました。
残念ながら、具体例は知らないですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、そういうやり方もありますね。
参考になります。

お礼日時:2010/08/16 04:53

はっきりいってpublic公開層に置くしかないでしょう。



そのうえでもし可能ならimagesフォルダ内をさらに分割して例えば
│├ public 公開層(ドキュメントルート)
││├ images
│││├ bbs
│││├ mail
みたいにするとか。
これでもまだ納得いかないかもしれませんが、切り分けしている気分にはなれるかもしれません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
自分もそのような配置が最初に浮かんだのですが、
でもモジュールなのになんかそれは違うかなぁということで質問してみたのですが、
自分的に納得しないというより、
デフォルトの画像を必要としているモジュールを
実際にどのように作成して配置して利用しているか知りたいと思いました。
いくつかそのような例があると助かるのですが

お礼日時:2010/08/15 03:44

>デフォルトの画像の保管場所は質問のディレクトリ構造の例だとどこになるのでしょうか?



これは、モジュールの設計者が決めることなので分かりません。
「外部」というのは極端な例ですが、設定次第で「どこへでも」置くことが出来ます。利用可能であるという条件以外は設計者の自由です。


デフォルトの画像がモジュールの提供者が提供しているものであれば、多分どこか専用のフォルダに納めていると思います。この場合、ユーザーはそのフォルダを操作できないのが通常です。

自分の好きな画像をアップして使用できるようなモジュールでしたら、実際に画像をアップしてみて、どこに格納されたか探してみる位しか方法は思いつきません。


>その都度Virtual Hostsファイルで設定するのもおかしい気がします・・・
おそらく、掲示板のデータをHTMLで書き出すときに画像のパスを指定していると思います。
Virtual Hostsファイルを使わなくても、HTMLの中で画像の場所を正しく指定すれば表示されます。このため、たとえ画像が別のサーバーにあっても表示が可能です。

具体的には、HTMLの中で画像を表示するには、imgタグを使いsrcで画像を指定します。
<img src="image/image01.gif">
と書きますと、HTMLと同じ場所にあるimageフォルダの中のimage01.gifとなります。

これを
<img src="http://xxxx.com/image/image01.gif">
と書きますと、xxxx.com(外部のサイトでも構いません)のimageフォルダの中のimage01.gifとなります。

このように、PHPの結果として出力されたHTMLの中で、画像のパスを指定すればいいので、Virtual Hostsファイルの設定はおそらくしないと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>Virtual Hostsファイルを使わなくても、HTMLの中で画像の場所を正しく指定すれば表示されます。
いややっぱり表示されませんでした・・・
myproject内に次のような記述をした.htaccessを置いてpublic(公開)フォルダ以外は見せないようにして、

[.htaccess]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>

┬ myproject
│├ .htaccess(上の内容のファイル)
│├ application1
│├ application2
│├ modules
││├ bbs(掲示板モジュール)
│││├ images
││││└ a.gif
│├ public 公開層(ドキュメントルート)
││├ images
││├ .htaccess
││└ index.php


<img src="../modules/bbs/images/a.gif" />
と記述したのですが、表示できませんでした。
その.htaccessを削除すると表示されました。
ということはやはり何らかの形で掲示板モジュール内にあるimagesフォルダをアクセスできるように
しないと駄目なわけですね?
でもそれは自分的にはなんか違うというかモジュール内は基本的にアクセス禁止(public公開層にあるindex.php経由で実行される)
なのに画像の場所だけアクセスできるようにするのは気持ち悪いというか・・
先ほども書きましたけど、でもそうする以外に方法はないですよね・・?

お礼日時:2010/08/14 15:21

>掲示板内で使われる表示(例えばタイトル画像とか背景画像とか)


半固定なので、設定は楽だと思います。

>つまり掲示板モジュールフォルダ内にimagesフォルダを作って
>そこをアクセスできようにするということでしょうか?
はい、可能です。それどころか、別のレンタルサーバーを用意して、そこにある画像を表示させることさえも出来ます。
(もちろん、takagoo100さんが掲示板のモジュールの設定変更の権限を持っていることが条件です。)

>モジュールの再利用に関しては具体的に利用したことがないので
>いまいち理解できてないのですが、画像を含む場合のモジュールは実際どのような
>感じで再利用されているのでしょうか?
モジュール次第ですので、一概には回答は出来ません。
メールモジュールですと「実行」の命令を出すときに、
 ・宛先
 ・件名
 ・本文
 ・差出人
の情報を一緒に送ります。

掲示板のタイトル画像や背景画像の場合には、都度設定するものではありませんのでおそらく「初期設定」という形で登録していると思います。
一例です。「掲示板A」「掲示板B」のふたつの掲示板を同じモジュールで表示するなら、掲示板モジュールを実行するときにAorBという情報も一緒に送ります。掲示板Aが呼び出されたら、「初期設定A」を読み込み、掲示板Bが呼び出されたら「初期設定B」読み込むようにしておけば、同じモジュールを違う設定で使うことが出来ます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
例えば画像があるURLだとか様々な設定を渡すところまでは分かったのですが、
デフォルトの画像の保管場所は質問のディレクトリ構造の例だとどこになるのでしょうか?
やはり掲示板モジュール内に公開層を作ることになるのでしょうか?
│├ modules
││├ bbs(掲示板モジュール)
│││├ controllers
││││└ helpers
│││├ models
│││├ views
││││└ scripts
│││├ images 公開層
モジュールを利用するユーザからの情報でデザインとか画像配置位置とか決まるとは思うのですが、
デフォルトの設定のままだと、どこかに公開できる画像はモジュール側で準備してないと駄目ですよね?
その場所が例えば外部のサイトにあったりだとかだと、ちょっと違うような気がするんです・・(つまり掲示板モジュール内に
controllerとかmodelとかのスクリプトが纏まっているのに画像だけ違う場所にあるのは)
そうすると実際にスクリプトがある掲示板モジュール内にimagesフォルダとかの公開層を作るしかないと思いますが
その都度Virtual Hostsファイルで設定するのもおかしい気がします・・・
ただ画像はアクセスできてなんぼなのでそれしか方法はないですよね・・?
デフォルトの画像を必要としないモジュールなら、そのモジュール内に纏めて配置することが可能だと思うんですけど
うーん・・

お礼日時:2010/08/14 03:19

おはようございます。




>画像だけ切り離しができないわけですが、なんとかならないでしょうか?
「掲示板」「PHP」といっても、最終的にはHTMLです。
HTMLの観点からは、パスを正しく指定すれば画像はどこにあっても構いません(もちろん、利用可能な場所というのは条件です)。

PHP での画像の置き場所の変更は、掲示板を表示させる部分と、画像のアップロードや削除などの管理画面の部分のPHPで画像のフォルダを変更すれば可能です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
この掲示板モジュールの場合の画像は、掲示板内で使われる表示(例えばタイトル画像とか背景画像とか)のことです。
説明が足りず申し訳ありません。

>パスを正しく指定すれば画像はどこにあっても構いません
つまり掲示板モジュールフォルダ内にimagesフォルダを作って
そこをアクセスできようにするということでしょうか?

│├ modules
││├ bbs(掲示板モジュール)
│││├ controllers
││││└ helpers
│││├ models
│││├ views
││││└ scripts
│││├ images 公開層

ただその都度Virtual Hostsファイルで掲示板モジュールのimagesフォルダを
アクセスできるようにするのなんか違うような気がします。
画像が必要な他のモジュールを追加する場合も
その都度Virtual Hostsファイルで設定する必要があるわけですよね?

モジュールの再利用に関しては具体的に利用したことがないので
いまいち理解できてないのですが、画像を含む場合のモジュールは実際どのような
感じで再利用されているのでしょうか?
mailモジュールとか画像がない場合はなんとなく利用してる様が想像できるのですが・・

お礼日時:2010/08/13 16:20

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