shellでFULL_BASE_URLを使おうとすると……

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
それはCakePHP1.3で開発していたある日のこと。

アパッチ「shellを起動する! 準備はいいな!?」
ケイク 「はっ! いつでもオーケーであります!」
アパッチ「起動! 迅速に処理を行ない、メールの送信をせよ!」
ケイク 「……た、大変です! アパッチ将軍!」
アパッチ「何事だ!? ケイク軍曹」
ケイク 「メール本文のURL記述部分に……エラーが出ております! 定数のFULL_BASE_URLが認識されておりません!」
アパッチ「ぬわにぃ!?」



「FULL_BASE_URL」っていうのは、CakePHPの中で定義されている、httpつきでホスト名が入っている定数です。あかつきのお宿だったら「http://norm-nois.com」ですね。SSLを使用しているサイトなら「https://norm-nois.com」とかになる。

で、まあ、当たり前といえば当たり前なんですけど、shellを起動するときっていうのは、特定のURLから処理を実行するようなものではないので、現在のURLだのホストだのっていう情報はサーバー変数に入ってないんですよね。

このFULL_BASE_URLっていうのは、$_SERVER[‘HTTP_HOST’]に何かしらの情報が入っている場合に作られる定数なので、shellのときは作られないんですね。たぶんだけど。



そうそう。

同じような理由で、リファラが取得できないってことも気づかずに、しばらくの間、どうして取得出来ないんだよーって、嘆いてたことがあります。

バッチ処理で、とあるURLにアクセスするような処理を書いておりまして、リファラで制限でもかけようと思ったんですけどそれができなくて、どないしたらええねんって、途方に暮れた経験があります。

でも、よくよく考えてみたら、そりゃそうなんだよ。URLで表示されるページからのアクセスじゃなくて、サーバー内部からのアクセスなんだから。URLの存在しない場所からのアクセスなんだから。

サーバー内部って言い方が適当かは分からないけど、ニュアンス的に。
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください