PHP 拡張機能のチュートリアルをいくつか行ってきましたが、既存の関数をオーバーロードする方法に関する情報が見つかりません。
たとえば、 fopen() を次のように変更したい
PHP_FUNCTION(fopen)
{
if condition_is_true(condition)
original_fopen();
else
show_error();
}
どうすればそれができますか?ありがとうございました
PS。私は拡張子を意味します(Cで書かれ、.soにコンパイルされ、.phpプログラムではなくhttpd.confに含まれています)
編集:Gordon リンクのおかげで解決策が見つかりました。
function の PECL パッケージをダウンロードしましrename_function
た。そのソースコードは、必要な結論に私を導きました:
function_table
名前に基づいて、関数のすべてのポインターを保持するグローバルハッシュテーブルがあります。zend_hash_find
//これにより、このテーブルで必要な変更を行うことができますzend_hash_add
。zend_hash_del