LoginSignup
8
8

More than 5 years have passed since last update.

PHPコードを.htaccessに埋め込む

Posted at

PHPとしても実行できるRubyの書きかた」にあやからせて頂きました。

こんな感じになりました

index.php
<?php
echo 'world';
.htaccess
#<?php /*
php_value output_buffering 2
php_value auto_prepend_file .htaccess

<IfModule dummy>
*/
echo substr(ob_get_clean(), 1); // 先頭の'#'を削除
ini_set('output_buffering', 0); // 戻す

echo 'hello ';

/*
</IfModule>
# */

この状態で index.php にアクセスすると hello world と出力されます。

先頭「#」の扱いについて

この1バイトが誤魔化せず output_buffering に頼って、後から消すことにしました。
substrしていますがイレギュラーが無ければob_end_clean()で捨てるだけでも大丈夫なはずです。

<IfModule dummy>について

存在しないモジュール名を<IfModule>などに与えることで複数行コメントのように扱っています。

使い所

あったらいいですね。

最初の例なら php.d にこんな2ファイル突っ込むだけで十分ですし。

/etc/php.d/myhook.ini
auto_prepend_file=/etc/php.d/myhook.php
/etc/php.d/myhook.php
<?php
echo 'hello ';

ちなみに元々は前の記事の続きとしてこんな、1ファイル置くだけでデバッグ用のフックか何かができないか考えていたことが発端でした。

#<?php /*
php_value output_buffering 2
php_value auto_prepend_file .htaccess

php_value error_log syslog

<IfModule dummy>
*/
echo substr(ob_get_clean(), 1); // 先頭の'#'を削除
ini_set('output_buffering', 0); // 戻す

function dump() {
    $args = func_get_args();
    foreach ($args as $arg) {
        error_log(var_export($arg, true));
    }
}

/*
</IfModule>
# */
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8