中年プログラマーの息抜き

ブログをはじめました。気の向くままにプログラム関連ネタをメモしていきます。

PHP 自動定数(__FILE__、__DIR__)からシンボリックリンクのパスをそのまま利用

はじめに

5年くらい前、サーバ内にいくつかのWordpressをデプロイするときに、設定ファイルとデータベース以外はシンボリックリンクで扱えるように(毎回Wordpress一式をコピーしなくても量産できる)方法を調べたことがあったなと思い出したので、今更ながら思い出せる範囲でメモってみる。

tm-b.hatenablog.com

PHP言語の標準動作はこうですね。

シンボリックリンクを解決した後の・・・

www.php.net

ということでPHPソースをいじる

シンボリックリンクを解決する前の・・・

どこを触ったかなって思い出してますが、1つはここ・・だった気がします。(前回の記事でメモっとおけばよかった。。時間とともに忘れる)

php-7.1.0/Zend/zend_language_scanner.c

556行目付近

 

修正前

if (file_handle->opened_path) {
    compiled_filename = zend_string_copy(file_handle->opened_path);
} else {
    compiled_filename = zend_string_init(file_handle->filename, strlen(file_handle->filename), 0);
}

 

修正後

if (file_handle->opened_path) {
    file_handle->opened_path = zend_string_init(file_handle->filename, strlen(file_handle->filename), 0);
    compiled_filename = zend_string_copy(file_handle->opened_path);
} else {
    compiled_filename = zend_string_init(file_handle->filename, strlen(file_handle->filename), 0);
}

この流れでインストール

ソースを触るので、yumなどのパッケージマネージャ経由ではインストールできませんよね。当たり前ですが・・ PHPソースから「 configure make make install 」

まとめ

これ以外にも何か触った気がしますが、、また思い出したら追記かな

セキュリティ対策などPHP4位からシンボリックリンクのパスのそのままが取得できなくなったと記憶してますが、自分で使うクローズされたプログラムであれば、まあ言語仕様を拡張(変更)する的なことも面白かったですよ。良い思い出ですね。 気が向いたら当時のVMを起動してコンパイルしたときのソースでも確認してみようかと思ったのでした。(rootのパスワードなんだっけってなりそう(汗))

・・ 5年たった今では、ソースを追えないかもしれない(泣)・・