PHP on Ruby (on PHP on Ruby on…)
同僚がphpDocumentorのソースに変なことが書いてあるというので見ると、確かに変だ。長いコメント部分を除くとこうなっている。
#!/bin/sh
if [ -z "$PHP" ]; then
PHP=`which php`
fi
(exec $PHP -C -q -d output_buffering=1 "$0" "$@") 2>/dev/null
if [ "$?" -ne "0" ]; then
echo "FAILED: Bad environment variable \$PHP (set to \"$PHP\")"
exit 1
fi
exit 0
<?php
ob_end_clean(); // make output from autofind php code disapear
$test = @include "phpDocumentor/find_phpdoc.php";
if ($test == 6) {
// find_phpdoc.php returns 6
include "phpDocumentor/phpdoc.inc";
} else {
echo "Error: phpDocumentor not found" . PHP_EOL;
}
?>
シェルスクリプトが冒頭にきて、その中から今度はPHPとして実行されるように自分自身を呼び出して、しかもご丁寧に出力バッファリングでシェルのコード部分が出力されないようにしているよ!PHPはHTMLに埋め込まれる言語でもあるので、開始タグ「<?php」と終了タグ「?>」で囲まれていない部分はそのまま出力されるから、これでもちゃんと実行される。
それにしても、この手が使えるなら、シェルスクリプト以外の言語だって動かせるんじゃなかろうか。
さっそく実験。
#!/usr/bin/ruby
puts "This is Ruby!"
system("php -d output_buffering=1 -q #{__FILE__}")
exit
__END__
<?php
ob_end_clean();
print("This is PHP!\n");
exit;
?>
実行結果:
This is Ruby! This is PHP!
なんと!
この手を使えば、PHP on Ruby on Railsだって夢じゃない!PHP4からの移行が大変?冗談でしょ。これからはPHPはあらゆるスクリプト言語の上(下)で動く時代ですよ。
Popularity: 3% [?]
