37588


php初心者です。  
Webサイト内で共通の操作を行うヘルパー関数群をまとめたモジュールを作りました(my_helper.php)。  
これをwebサイト内の任意のファイルから呼び出したいのですがどうしたら良いのでしょうか。

サイトの構造は例えば以下のような例です。

[code]

    /root/
       /toppage/
           index.php
           /subpage/
               index.php
       /q_and_a/
           index.php
    /common-module/
        helper.php <-こんな感じで配置したい
    
[/code]

includeを使って相対パスで呼び出すことをしていたのですが、階層が深くなるにつれて../../..を書くのが醜くメンテナンスも大変なので、別の方法を取り入れたいと思っているところです。

よろしくお願いします。


CC BY-SA 3.0
2017-08-24T22:32:14.127
37473
2017-09-07T17:09:51.690
2017-08-25T00:27:48.460
3060
24920
question
php
PHP自作ライブラリの配置場所はどこにするのがベストなのか


配置は問題ないように感じます。  
パスの指定方法を、

  1. $_SERVER['DOCUMENT_ROOT']を使う
  2. 絶対パスで指定する

のどちらかにしてみてはいかがでしょうか。

1番はechoなりに上記変数を突っ込んでいただくとわかりますが、ドキュメントルート(ドメイン直下)までのパスが出力されますので、そこからのパスを繋げればOKです。

2番はサーバのルートからの絶対パスなので、サーバが変わる可能性がある場合や、そもそもレンタルサーバなどでパスがわからない可能性もあるので、あまりおすすめではないです。


CC BY-SA 3.0
2017-08-30T01:58:37.563
37588
2017-08-30T01:58:37.563
25099
37473
answer


関数群であれば、 `include_path` などに絶対パスを追記して、読み込み場所を追加するのが最適です。  
<http://php.net/manual/ja/function.set-include-path.php>

他の手段として、各ファイルがクラスとして独立しているのであれば`spl_autoload_register` などを用いて解決するのが良いのではないかと。  
<http://php.net/manual/ja/function.spl-autoload-register.php>

蛇足ですが、  
他の手法として、composerのautoloaderを使用したほうがディレクトリの配置も、呼び出しも楽になると思います。  
具体的に

  * 各ファイル及びクラス群にnamespaceを使用し、ディレクトリごとにおける名前空間をきっちり定義する。
  * useで必要なクラスを必要なだけ呼び出す。 (includeで煩雑な呼び出しが不要になります。)

composerはパッケージマネージャなイメージが多いかと思われますが、こういった用途にも使用できかつ、サードパーティのモジュールも合わせて置くことが可能なので、検討されてはいかがでしょうか。


CC BY-SA 3.0
2017-09-07T17:09:51.690
37785
2017-09-07T17:09:51.690
18542
37473
answer