モジュール化ののちの読み込み作業エラー

XSASを紹介していることもあり、ローカルテストにはこれ使ってます。で、PHPモジュール化を施した部品を読み込ませる際に、XSASローカルサーバーとXREAサーバーでは挙動が異なる事に気付きました。 XSASでは、絶対パス指定を行うとエラーがでます。
Warning: readfile(): URL file-access is disabled in the server configuration in~
一方、XREAでは特に問題なく使えます。 これが最終的な解決策とは思えないのですが、とりあえず代替方法として記しておきます。XSASでの「擬似絶対パス」指定みたいな方法です。

結論(方法)

他は余談に近い感じなので、先に結論をご紹介。例として、parts/header.php の出力名として作成したヘッダー部分を用いてみます。
XREA<$MTBlogURL$>parts/header.php
XSASw:/www/サイトのディレクトリ名/parts/header.php
こうする事で、サイトの絶対パス指定が可能になります。

読み込ませる方法

PHPを用いてファイルを読み込ませるには、以下の方法があります。
  1. include・・・エラーの際Warningを出力。更にPHP処理を続行。リモートURLも可
  2. require・・・エラーの際Fatal Errorを出力。PHP処理を中止。リモートURLも可
  3. readfile・・・エラーの際FALSEを出力。処理中止。ローカルURL

※大雑把なので、詳細は PHP+上記構文 で検索を。

今回は「readfile」を用いる事にしました。

読み込みパスとエラー

例として、parts/header.php の出力名として用いたファイルを読み込ませます。
-XREAXSAS
<$MTBlogURL$>parts/header.php×
(絶対パス)parts/header.php××
(相対パス)../parts/header.php

ここで一番不都合を感じたのは1番目。なぜならば、MTタグを用いれば ローカル→XREAサーバー へテンプレートをそのままコピペ出来るから。

2番目はトップディレクトリのみに使えます。ディレクトリの階層が変わってしまうテンプレートには使えません。

3番目の相対パスを用いれば、ほどなく解決しそうなのですが、これはカテゴリーテンプレートに使えないのです。なぜならば、サブカテゴリがメインの下層にディレクトリを作成する場合、カテゴリーアーカイブに記述出来るのは1種類の相対パスなので、メインカテゴリに併せた相対パス記述を行っていると、メインの下層に出来るサブカテゴリディレクトリではファイルが読み込めなくなるからです。
この辺りは正規表現プラグインや、カテゴリ判定の機能を用いて振り分ける事は出来ますが、それもぼちぼちじれったいので止め。
日付アーカイブや年別アーカイブだと、作成されるディレクトリは固定(アーカイブ・マッピングの設定で固定させておけば)されているので、階層に併せて記述すればそれで解決ではあるのですけど。

例:相対パスを用いて読み込ませる(アーカイブの設定でarchivesパスを指定した場合)
  • エントリー・アーカイブ→%y/%m/%d%h%n%s.php・・・../../../parts/header.php
  • 日別・アーカイブ→yyyy/mm/dd/index.php・・・../../../../parts/header.php
  • 月別・アーカイブ→yyyy/mm/index.php・・・../../../parts/header.php
  • 年別・アーカイブ→yyyy/index.php・・・php readfile("../../parts/header.php

あとはカテゴリー・アーカイブに関しては、サブディレクトリを作らないようにするとか、つまりサブカテゴリを用いないようにすれば解決だったり、先に述べたように振り分け判定を用いるとか、諦めてカテゴリーだけはMTInclude使うとか、そういったようにすると良いのですが、個人的にやっぱり追求したくなって先を探りました。
そして、冒頭の▼結論を見つけました。

ローカル→サーバーに写す際に、このルート指定部分を書き直す必要はありますが、それでも、双方をほぼ同様の状態に保てるので助かります。

MTBlogURLタグが使えるようになるのが、本当は一番良いのですけどね・・・。

2006/11/03 09:57:43:記事書き直し

▲ to Top

トラックバック(0)

▲ to Top