ログ日記

作業ログと日記とメモ

parse_ini_file()とinclude_path

PHP5のparse_ini_file()はinclude_pathを見るの!?
今まで気付いてなかったorz
もう独自拡張したparse_ini_file()を使わなくていいのか・・。
標準関数にぼちぼち戻していこう。


念のためにソースを確認。

/* Zend/zend_ini_parser.c */
ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb
, void *arg)
{
        ...

        if (zend_ini_open_file_for_scanning(fh TSRMLS_CC)==FAILURE) {
                return FAILURE;
        }

        ...
}

/* Zend/zend_ini_scanner.c */
int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC)
{
        if (FAILURE == zend_stream_fixup(fh TSRMLS_CC)) {
                return FAILURE;
        }

        ...
}

/* Zend/zend_stream.c */
ZEND_API int zend_stream_fixup(zend_file_handle *file_handle TSRMLS_DC)
{
        switch (file_handle->type) {
                case ZEND_HANDLE_FILENAME:
                        if (FAILURE == zend_stream_open(file_handle->filename, file_handle TSRMLS_CC)) {
                                return FAILURE;
                        }
                        break;

        }
}

...

/* main/main.c */
static FILE *php_fopen_wrapper_for_zend(const char *filename, char **opened_path)
{
        TSRMLS_FETCH();

        return php_stream_open_wrapper_as_file((char *)filename, "rb", ENFORCE_SAFE_MODE|USE_PATH|IGNORE_URL_WIN|REPOR
T_ERRORS|STREAM_OPEN_FOR_INCLUDE, opened_path);
}

USE_PATHフラグが立っている。
もしかして全てのファイル読み取り用関数でuse_include_path用引数が無いものは、デフォルトでinclude_pathが効くようになったんだろうか?


# file_exists() はstat()を利用しているのでinclude_pathを見ない・・・この方式を取ってる限り改良はされないんだろうなぁ