Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

ApacheAccessorを試してみた

なにやら変り種の拡張モジュールがリリースされたようです。


ApacheAccessor lets you retrieve Apache configuration (at runtime of current proccess) as PHP array or dump it as HTML table.

稼働中のApacheプロセスの設定内容を取得したりdumpする拡張モジュールだそうで。。。ということで、ざっと試してみました。

インストール

お決まりのpeclコマンドからインストール。途中で、apxsコマンドとaprconfig(apr-config)コマンドのパスを聞いてきますので、適宜入力します。以下は、CentOS 5.4付属のrpmhttpd-devel、apr-develの各パッケージをインストールしていた場合の例です。

$ sudo pecl install apacheaccessor-beta
              :
Please provide the prefix of apxs2 binary [autodetect] : /usr/sbin/apxs
Please provide the prefix of aprconfig binary [autodetect] : /usr/bin/apr-1-config
              :
$ 
$ sudo sh -c "echo 'extension=apacheaccessor.so' >> /path/to/php.ini "
$ sudo /sbin/service httpd stop
$ sudo /sbin/service httpd start
$ 

提供される関数

php_apache_accessor.cを見る限り、追加される関数は次の2つのようです。

  • array apacheaccessor_get_conf()
  • void apacheaccessor_dump_conf([boolean dump_file_data, [resource stream] ])
    • dump_file_data : 『どのconfファイルの何行目』といった情報を表示するかどうか。デフォルトはfalse
    • stream : ストリーム。デフォルトは『php://output』

コードサンプル

apacheaccessor_get_conf関数は結果を配列で返します。設定がネストしている場合は多次元になります。

<?php
var_dump(apacheaccessor_get_conf());

これを実行すると次のようになります。

array
  'PidFile' => 
    array
      0 => 
        array
          'filename' => string '/usr/local/apache2/conf/httpd.conf' (length=34)
          'line_num' => int 11
          'args' => string 'logs/httpd.pid' (length=14)
  'Timeout' => 
    array
      0 => 
        array
          'filename' => string '/usr/local/apache2/conf/httpd.conf' (length=34)
          'line_num' => int 13
          'args' => string '300' (length=3)
  'KeepAlive' => 
    array
      0 => 
        array
          'filename' => string '/usr/local/apache2/conf/httpd.conf' (length=34)
          'line_num' => int 14
          'args' => string 'On' (length=2)
            :
  'Directory' => 
    array
      0 => 
        array
          'filename' => string '/usr/local/apache2/conf/httpd.conf' (length=34)
          'line_num' => int 99
          'subtree' => 
            array
              'Options' => 
                array
                  0 => 
                    array
                      'filename' => string '/usr/local/apache2/conf/httpd.conf' (length=34)
                      'line_num' => int 100
                      'args' => string 'FollowSymLinks' (length=14)
              'AllowOverride' => 
                array
                  0 => 
                    array
                      'filename' => string '/usr/local/apache2/conf/httpd.conf' (length=34)
                      'line_num' => int 101
                      'args' => string 'None' (length=4)
          'args' => string '/' (length=1)
      1 => 
        array
          'filename' => string '/usr/local/apache2/conf/httpd.conf' (length=34)
          'line_num' => int 103

一方のapacheaccessor_dump_conf関数ですが、引数なしの場合、次のような表組のHTMLを出力します(別途、style指定してます)。

また、ファイルに出力する場合、次のようなコードになります。

<?php
$fp = fopen('/path/to/conf.html', 'w');
apacheaccessor_dump_conf(true, $fp);

あと、試した感じ、.htaccessの設定は含まれないようです。

まとめ

んー、何に使えるかなぁ。。。
アクセスしているディレクトリとかLocationで有効になっている設定が表示できると、開発環境などでApacheの設定でハマった時のデバッグ/確認用に使えそうでいいんだけどなぁ。。。