您的位置:网站主页> PHP教程 > php清除文件缓存@php clearstatcache用法示例代码

php清除文件缓存@php clearstatcache用法示例代码

时间:2018-06-03 23:37:01   编辑:一切随缘   文章来源:php教程网 已阅读:250 次

编程入门教程[www.ask186.com]网站介绍 

    编程入门教程主要涉及WEB开发领域,主要为广大WEB开发人员提供最新的WEB开发资讯信息,包含php教程mysql教程php面试题在线调色板php学习以及常用( Amazon ApiGoogle Api)等API、爱问资源共享HTML转JS不显示xml...[详细]
广告投放: 编程入门教程:www.ask186.com 电话:15818865556

        php清除文件缓存@php clearstatcache用法示例代码

        说明
        void clearstatcache ([ bool $clear_realpath_cache = false [, string $filename ]] )
        当使用 stat(),lstat() 或者任何列在受影响函数表(见下面)中的函数时,PHP 将缓存这些函数的返回信息以提供更快的性能。然而在某些情况下,你可能想清除被缓存的信息。例如如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存。这种情况下,可以用 clearstatcache() 函数来清除被 PHP 缓存的该文件信息。

        必须注意的是,对于不存在的文件,PHP 并不会缓存其信息。所以如果调用 file_exists() 来检查不存在的文件,在该文件没有被创建之前,它都会返回 FALSE。如果该文件被创建了,就算以后被删除,它都会返回 TRUE 函数 unlink() 会自动清除该缓存.

        Note:

        本函数缓存特定文件名的信息,因此只在对同一个文件名进行多次操作并且需要该文件信息不被缓存时才需要调用 clearstatcache()。


        受影响的函数包括 stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() 和 fileperms()。

        参数

        clear_realpath_cache
        是否清除真实路径缓存

        filename
        清除文件名指定的文件的真实路径缓存; 只在 clear_realpath_cache 为 TRUE 时启用


        返回值
        没有返回值。 

        范例

        Example #1 clearstatcache() 例子

        <?php
        $file = 'output_log.txt';

        function get_owner($file)
        {
            $stat = stat($file);
            $user = posix_getpwuid($stat['uid']);
            return $user['name'];
        }

        $format = "UID @ %s: %s\n";

        printf($format, date('r'), get_owner($file));

        chown($file, 'ross');
        printf($format, date('r'), get_owner($file));

        clearstatcache();
        printf($format, date('r'), get_owner($file));
        ?>
        以上例程的输出类似于:

        UID @ Sun, 12 Oct 2008 20:48:28 +0100: root
        UID @ Sun, 12 Oct 2008 20:48:28 +0100: root
        UID @ Sun, 12 Oct 2008 20:48:28 +0100: ross


        --------------------------------------------------------------------------------

        chowncopyFilesystem 函数
        在线手册:中文 英文PHP手册
        用户评论:
        matt_m at me dot com (23-Sep-2011 11:04)


        unlink() does not clear the cache if you are performing file_exists() on a remote file like:

        <?php
        if (file_exists("ftp://ftp.example.com/somefile"))
        ?>

        In this case, even after you unlink() successfully, you must call clearstatcache().

        <?php
        unlink("ftp://ftp.example.com/somefile");
        clearstatcache();
        ?>

        file_exists() then properly returns false.

        markandrewslade at gmail dot com (08-Mar-2010 07:54)


        On Linux, a forked process inherits a copy of the parent's cache, but after forking the two caches do not impact each other.  The snippet below demonstrates this by creating a child and confirming outdated (cached) information, then clearing the cache, and getting new information.

        <?php

        function report($directory, $prefix = '') { printf('%sDoes %s exist?  PHP says "%s"'. PHP_EOL, $prefix, $directory, is_dir($directory) ? 'yes' : 'no'); }
        $target = './delete-me-before-running-statcache';

        if (is_dir($target)) {
            die("Delete $target before running.\n");
        }

        echo "Creating $target.\n";
        mkdir($target) || die("Unable to create $target.\n");
        report($target); // is_dir($target) is now cached as true

        echo "Unlinking $target.\n";
        rmdir($target) || die("Unable to unlink $target.\n");

        // This will say "yes", which is old (inaccurate) information.
        report($target);

        if (($pid = pcntl_fork()) === -1) { die("Failed to pcntl_fork.\n"); }
        elseif ($pid === 0) {
            // child
            report($target, '<<child>> ');
            echo "<<child>> Clearing stat cache.\n";
            clearstatcache();
            report($target, '<<child>> ');
        } else {
            // parent
            sleep(2); // move this to the child block to reverse the test.
            report($target, '<<<parent>> ');
            clearstatcache();
            report($target, '<<<parent>> ');
        }

        ?>
 

  • 上一篇:
  • 下一篇:

本文地址:http://www.ask186.com/content/article/php/31954.html(转载请保留)

相关关键词搜索:php,清除,文件,@php,clearstatcache,用法,示例,代码

发表评论
      
* 以上用户言论只代表其个人观点,不代表www.ask186.com网站的观点或立场
推荐文档更多
编程入门教程 | PHP教程 | Mysql教程 | Apache教程 | 最新文章 | PHP面试题| 网站地图 | Google地图 | Baidu地图 | 在线WEB论坛| 中纪委反腐最新消息

WEB技术QQ交流群:151963186 站长Q号:547214413
版权所有者:编程入门教程 地址:云南省文山州砚山县盘龙乡 滇ICP备12002707号-1
特别声明:本站内容仅供参考,不作为设计及确切依据!想了解更多,可立即进入Bbs提问