Unix コマンド ライン スクリプトの場合、モノリシックなアプローチにより、非常に高いレベルの移植性が実現します。
単一の(ハッシュバン)スクリプトを使用すると、スクリプトをダンプすることもできますusr/bin
sudo cp myprog /usr/bin
/* (...) */
sudo cp myprog /usr/games
/* (...) */
myprog
これにより、 の代わりに ,と入力するだけで、どこからでも任意のパスからプログラムを呼び出すことができます/PATH/./myprog
。それが信頼できることを確認してください!
パスには特別な注意を払う必要があります。
パスに関するいくつかの簡単な例:
/* Create a folder in the home directory, named as the script name, if not existing. -*/
if (!is_dir($_SERVER["HOME"]."/".$_SERVER["SCRIPT_NAME"])){
@mkdir($_SERVER["HOME"]."/".$_SERVER["SCRIPT_NAME"]);
}
/* Program folder path: --------------------------------------------------------------*/
$PATH = $_SERVER["HOME"]."/".basename($_SERVER["SCRIPT_NAME"])."/";
/* Program running path, currently: --------------------------------------------------------------*/
$JOBPATH = getcwd();
POSIX シグナルの処理
/* Register cleaning actions at SIGINT ------------------------------------- */
function shutdown() {
// Perform actions at ctrl+c
echo "Good bye!";
exit;
}
/* Register resize at SIGWINCH ---------------------------------------------- */
function consoleResize() {
@ob_start;
$W = (int)exec("tput cols"); // Columns count
$H = (int)exec("tput lines"); // Lines count
@ob_end_clean();
// Shell window terminal resized!
}
/* Register action at SIGSTOP (Ctrl + z) ---------------------------------------------- */
function sigSTOP() {
// Program paused!
}
/* Register action at SIGCONT (Type fg to resume) ---------------------------------------------- */
function sigCONT() {
// Program restarted!
}
register_shutdown_function("shutdown");
declare(ticks = 1);
pcntl_signal(SIGINT, "shutdown");
pcntl_signal(SIGWINCH, "consoleResize");
これは、すべてを 1 つのブロックに書き込む必要があるという意味ではありませんが、レンダリングを 1 つのファイルにマージすると、UNIX 環境で多くの追加機能が可能になります。
言いたいことはたくさんありますが、cli スクリプトとしての php は驚くべき獣です。