【実験結果】さくらでphpのincludeするための方法を詳しく解説

この実験は、 2016年5月22日のものです。
後で、さくらインターネットのサーバーの設定が変わってしまうかもなので、その際はご容赦下さい。

現在は、PHPでのテンプレートの読み込みをやめ、SSIでテンプレートファイルを読み込んでいます。
(詳しくは 【難問解決】 SSIのインクルードで圧縮できるか実験してみた をご覧ください)


私が、さくらインターネットで phpファイルをincludeするためになぜこのような方法をとったのかについての解説です。
ですので、方法だけ知りたい方は、【ついに完成】 さくらでもincludeをする方法を御覧ください。

include用のコードの変更

ヘテムルは、こんな簡単なインクルード用のコードで動かすことができていた。
でも、さくらはこれでは動かない。

<?php include("http://○○○.○○○/○○○.▲▲▲"); ?>

こうする必要がある。

<?php
$openfile = file_get_contents('http://example.com/example.php');//
echo $openfile;//
?>


【参考】
さくらサーバーで.htmlをphpとして動かす


参考にさせて頂いた上記のサイトでは、コード内には『 // 』が埋め込まれていたが、コードを短くするために改行を外すとエラーが出てしまうので、『 // 』は外した。

<?php $openfile = file_get_contents('http://○○○.○○○/○○○.▲▲▲'); echo $openfile; ?>

URLを囲むのは シングルクォーテーション 『 ' 』 でもダブルクォーテーション " 』 でも、どちらでも作動する。
気持ち悪いので、とりあえずうちではダブルにしてある。


【シングルの場合】
<?php $openfile = file_get_contents('http://○○○.○○○/○○○.▲▲▲'); echo $openfile; ?>

【ダブルの場合】
<?php $openfile = file_get_contents("http://○○○.○○○/○○○.▲▲▲"); echo $openfile; ?>


さくら公式ヘルプでは、SSIを使って擬似的にphpのインクルードを実現する方法について書かれてあたが、これではあまりにもアレなので(ズボラ管理人は見ただけで拒絶反応)、これは使わないことにした。


CGI・PHP・SSI について


<!--#str1 str2="str3"-->
<!--#include virtual="/dir/filename.shtml"-->

スポンサーリンク

php.iniの変更

さくらインターネットでは、php.iniを変更できる。
なので、下のコードを追加することもできるが、これはあっても無くてもOK。

と言うか、あっても無くても作動するところを見ると、今は元の設定がこうなのかもしれない。


【php.ini】

allow_url_fopen = On
allow_url_include = On


htaccessファイルの変更

AddHandler myphp-script .html .html
Action myphp-script /php.cgi

AddHandler myphp-script .html は、『 html ファイルは .phpファイル ファイルとして読み込みますよ 』 と言う意味。

うちは、拡張子が html ではなく htm なので、AddHandler myphp-script .htm になった。
htmlファイルも追加する場合は、.htmの後ろに.htmlを追加すればOK。


【htmlファイルも追加する場合】

AddHandler myphp-script .php .htm .html


Action myphp-script /php.cgi は、まずは同じ階層にある php.cgiファイルを読み込め と言う意味。
なので、php.cgi同階層にある必要がある。



ムームードメイン のサーバーの設定が間違っていた時には、サイトを表示すると /php.cgi/フォルダ名/ファイル名.htm になって 『 謎のエラー 』 が出てしまっていたが、ドメインの設定を正常化してからは、普通に表示されるようになった。
(ムームードメインで管理しているドメインをさくらインターネットで表示する場合、ネームサーバーの設定だけではなく、ムームーDNSからサブドメインと独自ドメインを全部設定してあげないと、正常にDNS情報の変更ができないっぽい)



ネームサーバーの変更
→ メールサーバーの変更はできる
→ サーバー情報は変更できない


ネームサーバーはムームーDNS & ムームーDNSでカスタム設定する
→ メールサーバーとサーバー情報の変更もできた


 


/usr/local/php-(phpのバージョン)/bin/php-cgiのコピーについて

ネットでincludeの方法を探していた時、/usr/local/php-*.*.*/bin/php-cgi をローカルにコピーして、それを各ドメインのルートフォルダーにアップロードする方法もは、ファイルサイズが大きすぎるのでやめておくことにした。
しかも、バージョンアップした時に一々対応するのが面倒くさい

バージョンアップの確認をする手間、最新のファイルをダウンロードしてアップロードする手間を考えるだけで鬱になる。
ズボラ人間の管理人には絶対に無理。ヘ(^д^ ヘ))

なので、php.cgiを作成してこのコードを書くことにした。

#!/bin/sh
exec /usr/local/bin/php-cgi

『 #!/bin/sh 』 はシェルの作成・実行に必要な定型文みたいなもの。
下に書かれたプログラムを実行しなさいと言う命令
(文頭のこれがないと問題が起きてしまうようなのでこれは必須らしい)


参考

htmlファイル内でPHPを動作させる [さくらサーバー編]

シェルの作成・実行


execの読み方はエグゼック、若しくはエグゼク。
元の単語はexecute。
読み方は、エクセキュート(ゥ)。
日本語の意味は 『 実行 』。


exec

executeの意味・解説


実行する、遂行する、達成する、実施する、執行する、施行する、死刑を執行する、処刑する、演ずる、演奏する

『 exec /usr/local/bin/php-cgi 』 は、/usr/local/bin/php-cgiを実行しろと言う意味。

なので、一々コピーして各ドメイン直下のフォルダにUPしなくても、/usr/local/bin/php-cgiのプログラムを読み込んで実行してくれる・・・はず!( ´艸`)
(読み込まれなかったらごめんなさい)

と言うか、何気に コントロールパネルサーバ情報の表示 > サーバに関する情報 の中にコマンドパスが書かれてあった。(^o^;)


1. さくらレンタルサーバーのコントロールパネル
2. サーバー情報の表示(左サイドバー)
3. サーバーに関する情報



ちなみに、/usr/local/bin/php-cgi をダウンロードして、名前を php.cgiに変更しても上手く作動しなかった。
(これはあくまでも推測だが、/usr/local/bin/php-cgiは、別の場所にある最新バージョンのphpファイルを読み込みに行ってるので、各ドメインのルートフォルダに設置してしまうと、アドレスが変わってエラーが起きてしまうのかも?と思った)

Shift_JIS で作成したファイルが文字化けしてしまう件

htaccessファイルで文字化けの解消ができることを知っていたので、htaccessファイルで文字化けを解消してしまおうと思ったが、なぜかどうやっても htaccessファイルでは Shift_JIS で作成したファイルの文字化け問題を解消できなかった。

ファイルの文字コードをUTF-8に変更するのもありだとは思うが、普段使っているツールShift_JISで保存してしまうがあるので、できればShift_JIS のままで文字化け対策をしたかった。

そこで、それを解消するために各htmlファイルの一番先頭の行に

<?php header("Content-Type: text/html;charset=Shift_JIS");?>

このコードを入れた。


生のHTTPヘッダーを送信する


文字化け覚悟ではあるが、文字コード一括変換ツールを使って全部 UTF-8 に変更するのもありだとは思うが、ツールの性質上、更新したり追加したり変更したりするときに文字コードが Shift_JIS に戻ってしまいやすい場合、弄る度に一々イライラしてしまうことになるので、その点は注意が必要なのではないかと思う。



次ページ

【php.cgi】さくらインターネットのインクルード実験の詳細 【htaccess】

前ページ

【ついに完成】 さくらでもincludeをする方法


スポンサーリンク