作業の覚え書き

Web 制作 Memo

By

さくらのサーバーで.htmlにPHPインクルードを使うための設定

2004年からさくらインターネットを利用しているが、Dreamweaverでプレビューも編集もできて便利ということもあって、SSI(サーバーサイドインクルード)をずっと使い続けてきた。
拡張子を .shtml にしなくても使えるよう .htaccess に次の一行を追加

AddType text/x-server-parsed-html .html .htm .shtml

HTMLファイルのインクルードファイルを読み込みたい箇所に

<!–#include virtual=”/inc/header.html” –>

すべての階層に置かれたファイルに、この一行を追加するだけでOK。
しかし、同じサーバーで PHP のインクルードと SSI のインクルードは共存できないようなので、このさい PHP のインクルードに移行することにした。

■php.cgi の設置

ターミナルでサーバーにログイン、下記のコマンドを実行してファイルをコピー&リネーム
※FTPソフトでコピーする場合はバイナリモードで転送する

% cp /usr/local/php/5.2.17/bin/php-cgi /home/ユーザー名/www/php.cgi

php.cgi ファイルのパーミッションを755に変更。
ディレクトリ移動して chmod。
※サイトルートに置く場合は755になるのでそのままでOK

$ cd /home/ユーザー名/www
$ chmod 755 php.cgi

■.htaccessの編集

さくらのサーバではPHPをCGIモードで動かさないといけないため、PHPファイルをCGIとして認識するよう .htaccess に下記を追記

DirectoryIndex index.html index.php index.htm
Action myphp-script /php.cgi
AddHandler myphp-script .php .html

※HTML内でPHPを実行する準備が完了。

■インクルードするHTMLファイルの編集

HTMLファイルの共通ファイルを読み込みたい箇所に

<?php include(“../inc/header.html”); ?>

で、一応動作する。
しかし、これだけでは気に入らない。
すべて同じ階層から呼び出すのなら良いのだが、他の階層から呼び出す場合、いちいちそれぞれの階層を把握して相対パスを書いていくのは非効率すぎる。

ということで include path を設定して、どこから参照しても同じファイルに辿り着けるようにする。

<?php set_include_path(get_include_path().PATH_SEPARATOR.’/home/ユーザー名/www/’); include(‘inc/header.html’); ?>

続けて同じ HTML 内に他のファイルをインクルードしたい場合(たとえばフッターを最下部に読み込むとか)は

<?php include(‘inc/footer.html’); ?>

でOK。もしくは、下記のようにフルパスで指定すれば set_include_path は不要。

<?php include(‘/home/ユーザー名/www/inc/header.html’); ?>
<?php include(‘/home/ユーザー名/www/inc/footer.html’); ?>

ついでに、ローカルでインクルードPHPを表示するための設定。

WindowsならXAMPP、MacならMAMPPをインストール

Apacheの Dcument Root にローカルサイトのルートディレクトリのパスを記入

/Users/ユーザー名/サイト名

apatch/httpd.conf を探して「AddType application/x-httpd」に .html がなければ追加する。

AddType application/x-httpd-php .php .phtml .html

ローカルに .htaccess を置いていると誤動作することがあるのでリネームしておく。

DreamWeaver で確認するには「サイトの管理」→「サーバー」からテストサーバーを追加する
サーバーフォルダーに、ローカルサイトのルートディレクトリのパスを記入

/Users/ユーザー名/サイト名

「詳細設定」タブの「テストサーバー」サーバーモデルはPHP MySQL を選択

ライブビューをオンにして、URL欄にアドレスを入力

http://localhost:8888/

もちろん、ブラウザで同じアドレスを表示して確認することも可能。

【追記】
他の階層のHTMLファイルも同様に確認したい場合はset_include_pathにローカルのパスを追記しておく

set_include_path(get_include_path().PATH_SEPARATOR.’/Users/ユーザー名/web/サイト名/’);