mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
add realpath cache inspect functions
This commit is contained in:
parent
413196c574
commit
7beb1af8de
1
NEWS
1
NEWS
@ -21,6 +21,7 @@ PHP NEWS
|
||||
- Added support for CURLOPT_CERTINFO. FR #49253.
|
||||
(Linus Nielsen Feltzing <linus@haxx.se>)
|
||||
- Added client-side server name indication support in openssl. (Arnaud)
|
||||
- Added realpath_cache_size() and realpath_cache_get(). (Stas)
|
||||
|
||||
- Improved fix for bug #50006 (Segfault caused by uksort()). (Stas)
|
||||
|
||||
|
@ -590,6 +590,22 @@ CWD_API realpath_cache_bucket* realpath_cache_lookup(const char *path, int path_
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
CWD_API int realpath_cache_size()
|
||||
{
|
||||
return CWDG(realpath_cache_size);
|
||||
}
|
||||
|
||||
CWD_API int realpath_cache_max_buckets()
|
||||
{
|
||||
return (sizeof(CWDG(realpath_cache)) / sizeof(CWDG(realpath_cache)[0]));
|
||||
}
|
||||
|
||||
CWD_API realpath_cache_bucket** realpath_cache_get_buckets()
|
||||
{
|
||||
return CWDG(realpath_cache);
|
||||
}
|
||||
|
||||
|
||||
#undef LINK_MAX
|
||||
#define LINK_MAX 32
|
||||
|
||||
|
@ -238,6 +238,9 @@ extern virtual_cwd_globals cwd_globals;
|
||||
CWD_API void realpath_cache_clean(TSRMLS_D);
|
||||
CWD_API void realpath_cache_del(const char *path, int path_len TSRMLS_DC);
|
||||
CWD_API realpath_cache_bucket* realpath_cache_lookup(const char *path, int path_len, time_t t TSRMLS_DC);
|
||||
CWD_API int realpath_cache_size();
|
||||
CWD_API int realpath_cache_max_buckets();
|
||||
CWD_API realpath_cache_bucket** realpath_cache_get_buckets();
|
||||
|
||||
/* The actual macros to be used in programs using TSRM
|
||||
* If the program defines VIRTUAL_DIR it will use the
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
24
ext/standard/tests/file/realpath_cache.phpt
Normal file
24
ext/standard/tests/file/realpath_cache.phpt
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user