diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/standard/basic_functions.c | 8 | ||||
| -rw-r--r-- | ext/standard/filestat.c | 38 | ||||
| -rw-r--r-- | ext/standard/php_filestat.h | 2 | ||||
| -rw-r--r-- | ext/standard/tests/file/realpath_cache.phpt | 24 |
4 files changed, 72 insertions, 0 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index b035782dc3..eac15f3c62 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -1301,6 +1301,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_clearstatcache, 0, 0, 0) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO(arginfo_realpath_cache_size, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO(arginfo_realpath_cache_get, 0) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO(arginfo_fileperms, 0) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() @@ -3198,6 +3204,8 @@ const zend_function_entry basic_functions[] = { /* {{{ */ PHP_FE(disk_total_space, arginfo_disk_total_space) PHP_FE(disk_free_space, arginfo_disk_free_space) PHP_FALIAS(diskfreespace, disk_free_space, arginfo_disk_free_space) + PHP_FE(realpath_cache_size, arginfo_realpath_cache_size) + PHP_FE(realpath_cache_get, arginfo_realpath_cache_get) /* functions from mail.c */ PHP_FE(mail, arginfo_mail) diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c index 735a1d5f3f..f37f5bb599 100644 --- a/ext/standard/filestat.c +++ b/ext/standard/filestat.c @@ -1107,6 +1107,44 @@ FileFunction(php_if_lstat, FS_LSTAT) FileFunction(php_if_stat, FS_STAT) /* }}} */ +/* {{{ proto bool realpath_cache_size() + Get current size of realpath cache */ +PHP_FUNCTION(realpath_cache_size) +{ + RETURN_LONG(realpath_cache_size()); +} + +/* {{{ proto bool realpath_cache_get() + Get current size of realpath cache */ +PHP_FUNCTION(realpath_cache_get) +{ + realpath_cache_bucket **buckets = realpath_cache_get_buckets(), **end = buckets + realpath_cache_max_buckets(); + + array_init(return_value); + while(buckets < end) { + realpath_cache_bucket *bucket = *buckets; + while(bucket) { + zval *entry; + MAKE_STD_ZVAL(entry); + array_init(entry); + + add_assoc_long(entry, "key", bucket->key); + add_assoc_bool(entry, "is_dir", bucket->is_dir); + add_assoc_stringl(entry, "realpath", bucket->realpath, bucket->realpath_len, 1); + add_assoc_long(entry, "expires", bucket->expires); +#ifdef PHP_WIN32 + add_assoc_bool(entry, "is_rvalid", bucket->is_rvalid); + add_assoc_bool(entry, "is_wvalid", bucket->is_wvalid); + add_assoc_bool(entry, "is_readable", bucket->is_readable); + add_assoc_bool(entry, "is_writable", bucket->is_writable); +#endif + zend_hash_update(Z_ARRVAL_P(return_value), bucket->path, bucket->path_len+1, &entry, sizeof(zval *), NULL); + bucket = bucket->next; + } + buckets++; + } +} + /* * Local variables: * tab-width: 4 diff --git a/ext/standard/php_filestat.h b/ext/standard/php_filestat.h index 6e3a6774e9..fa46bc5b92 100644 --- a/ext/standard/php_filestat.h +++ b/ext/standard/php_filestat.h @@ -24,6 +24,8 @@ PHP_RINIT_FUNCTION(filestat); PHP_RSHUTDOWN_FUNCTION(filestat); +PHP_FUNCTION(realpath_cache_size); +PHP_FUNCTION(realpath_cache_get); PHP_FUNCTION(clearstatcache); PHP_FUNCTION(fileatime); PHP_FUNCTION(filectime); diff --git a/ext/standard/tests/file/realpath_cache.phpt b/ext/standard/tests/file/realpath_cache.phpt new file mode 100644 index 0000000000..1e19486c49 --- /dev/null +++ b/ext/standard/tests/file/realpath_cache.phpt @@ -0,0 +1,24 @@ +--TEST-- +realpath_cache_size() and realpath_cache_get() +--FILE-- +<?php + +var_dump(realpath_cache_size()); +$data = realpath_cache_get(); +var_dump($data[__DIR__]); + +echo "Done\n"; +?> +--EXPECTF-- +int(%d) +array(4) { + ["key"]=> + int(%d) + ["is_dir"]=> + bool(true) + ["realpath"]=> + string(%d) "%sfile" + ["expires"]=> + int(%d) +} +Done |
