[目次]
Userdir 下で PHP Composer を使う環境 | Webプログラミング!(2021年度)
Userdir
Webサーバで, 各Linux/Unix ユーザがWeb公開領域(Web root)を持つ機能.
典型的には,
- サーバ example.com のユーザ username の home directory /home/username下の /home/username/public_htmlが各ユーザの web root http://example.com/~username/ に対応.
- /home/username/public_html/a/b/cが URL http://example.com/~username/a/b/cに対応
Apache なら userdir module で実現される.
Composer
PHPで, プロジェクトの外部ライブラリのバージョンを管理する仕組み. プロジェクト名を p とすると, ディレクトリ p下の p/vendorに外部ライブラリが置かれ, p/publicが公開用ディレクトリ. これをWeb rootにせよ, などという説明がなされる.
プロジェクトのディレクトリ p 全体を, ユーザの Web root public_html 下に置くような配置は正しくない. 公開すべきものをp/public, 公開すべきでないものをp/それ以外に区別しておいているのだから.
どうする?
ユーザの Web root public_html 下に, 公開ディレクトリ p/publicのシンボリックリンク(Windowsのショートカットのようなもの)を置けばよい.
具体例
- プロジェクトのディレクトリ /home/username/dev/p
- プロジェクトの公開ディレクトリ /home/username/dev/p/public
- プロジェクトの公開ディレクトリに相当するURL http://example.com/~username/app/p
ln -s /home/username/dev/p/public /home/username/public_html/app/p
を実行. ここでは明確さ重視で書いたが, もう少しタイプ数は節約できるし, (これは絶対パス指定だが)相対パス指定で行う方が適切なこともある. また, pというディレクトリ名を共通に使っているが, そうしなければいけない理由はない.
Apache HTTPD サーバ管理者がすべき設定
- userdir module をロード
- Userdir 下に Options FollowSymLinks(IfOwnerMatched)