


php creates a file named test.html and uses filectime to get the creation time t1
php deletes the file named test.html
php recreates the file named test.html and uses filectime to get the creation time t2
Why t1 = t2? ? Why is the creation time not updated? ? I used the clearstatcache function to clear the file status cache, but it didn't work. How to solve this problem? ? (Because when judging whether to regenerate the cache file, you need to know the creation time of the cache file, so it is very important..., please solve it~)
The following is the code for the problem that occurs in this situation (it is a bit dense, please be patient and read it) ):
<code> // 页面缓存 if ((defined('DEBUG_MODE') && !DEBUG_MODE) && (defined('CACHE_CONTROL') && CACHE_CONTROL)) { $opr = $GLOBALS['module'] . '/' . $GLOBALS['platform'] . '/' . $GLOBALS['controller'] . '/' . $GLOBALS['act']; $cache_name = md5($opr) . TEMPLATE_SUFFIX; $cache_file = APP_DIR . '/' . $GLOBALS['module'] . '/' . $GLOBALS['platform'] . '/Cache/' . $cache_name; // 清除文件状态缓存(就我使用的情况来看,压根没毛用...,这什么情况??) clearstatcache(); // 缓存文件不存在 创建 if (!$GLOBALS['FOpr']->checkFile($cache_file)) { require_once $view_file; $GLOBALS['FOpr']->cFile($cache_file); $GLOBALS['FOpr']->wData($cache_file , ob_get_contents()); } else { // 超时重新缓存 if (time() > filectime($cache_file) + CACHE_LIFE_TIME) { require_once $view_file; // 缓存文件超时时,先删除原缓存文件 $GLOBALS['FOpr']->dFile($cache_file); // 新建同名缓存文件 //(新建文件时,filectime 获取文件创建时间一直没更新!这个怎么破?? // 这导致我没法重新生成缓存文件了!) $GLOBALS['FOpr']->cFile($cache_file); // 写入缓存 $GLOBALS['FOpr']->wData($cache_file , ob_get_contents() , 'w'); } else { // 加载缓存文件 require_once $cache_file; } } } else { // 显示动态文件(非缓存) require_once $view_file; }</code>
Reply content:
php creates a file named test.html and uses filectime to get the creation time t1
php deletes the file named test.html
php recreates the file named test.html and uses filectime to get the creation time t2
Why t1 = t2? ? Why is the creation time not updated? ? I used the clearstatcache function to clear the file status cache, but it didn't work. How to solve this problem? ? (Because when judging whether to regenerate the cache file, you need to know the creation time of the cache file, so it is very important..., please solve it~)
The following is the code for the problem that occurs in this situation (it is a bit dense, please be patient and read it) ):
<code> // 页面缓存 if ((defined('DEBUG_MODE') && !DEBUG_MODE) && (defined('CACHE_CONTROL') && CACHE_CONTROL)) { $opr = $GLOBALS['module'] . '/' . $GLOBALS['platform'] . '/' . $GLOBALS['controller'] . '/' . $GLOBALS['act']; $cache_name = md5($opr) . TEMPLATE_SUFFIX; $cache_file = APP_DIR . '/' . $GLOBALS['module'] . '/' . $GLOBALS['platform'] . '/Cache/' . $cache_name; // 清除文件状态缓存(就我使用的情况来看,压根没毛用...,这什么情况??) clearstatcache(); // 缓存文件不存在 创建 if (!$GLOBALS['FOpr']->checkFile($cache_file)) { require_once $view_file; $GLOBALS['FOpr']->cFile($cache_file); $GLOBALS['FOpr']->wData($cache_file , ob_get_contents()); } else { // 超时重新缓存 if (time() > filectime($cache_file) + CACHE_LIFE_TIME) { require_once $view_file; // 缓存文件超时时,先删除原缓存文件 $GLOBALS['FOpr']->dFile($cache_file); // 新建同名缓存文件 //(新建文件时,filectime 获取文件创建时间一直没更新!这个怎么破?? // 这导致我没法重新生成缓存文件了!) $GLOBALS['FOpr']->cFile($cache_file); // 写入缓存 $GLOBALS['FOpr']->wData($cache_file , ob_get_contents() , 'w'); } else { // 加载缓存文件 require_once $cache_file; } } } else { // 显示动态文件(非缓存) require_once $view_file; }</code>
As far as your application scenario is concerned:
filemtime can better complete the Cache timeout judgment logic;
The file does not need to be deleted, because the filemtime will change after rewriting;
There must be a reason why you deleted the file, but please see the "off-topic" under the answer
As far as deleting and creating files in PHP
The author did an experiment using the following code
<code>$path = __DIR__.'/test.txt'; file_put_contents($path, 'content1'); echo filectime($path),PHP_EOL; unlink($path); sleep(2); file_put_contents($path, 'content2'); echo filectime($path),PHP_EOL;</code>
Result:
windows (windows 10 x64)
The return time is indeed the same. When I execute it for the second time, the time is still the same as the first time.
But I did see this txt disappear for 2 seconds and then be generated again. This may have such a logic under Windows (I haven’t gone into it yet). The picture below shows the file attributes I got after executing it for the second time:
CentOS under Linux
The return time will change
Off topic
In some file cache engines I wrote or I saw, the read cache operation did not delete the Cache file even if a timeout was detected.
I’m not being lazy here, after all it’s easy to unlink
Instead, it reduces necessary i/o requests and the risk of unlink caused by concurrency (Think about why?)
Besides, according to inertial thinking, since you are accessing this cache, this cache will definitely be overwritten, so there is not much meaning in rebuilding after deletion
The only problem is disk space occupation. For example, some caches that have not been accessed for a long time still occupy space. For this situation, we generally choose to tolerate it, or implement the code ourselves and use scheduled tasks to delete it
smarty compiled files are similar to your scenario, his approach is: don’t delete

ThesecrettokeepingaPHP-poweredwebsiterunningsmoothlyunderheavyloadinvolvesseveralkeystrategies:1)ImplementopcodecachingwithOPcachetoreducescriptexecutiontime,2)UsedatabasequerycachingwithRedistolessendatabaseload,3)LeverageCDNslikeCloudflareforservin

You should care about DependencyInjection(DI) because it makes your code clearer and easier to maintain. 1) DI makes it more modular by decoupling classes, 2) improves the convenience of testing and code flexibility, 3) Use DI containers to manage complex dependencies, but pay attention to performance impact and circular dependencies, 4) The best practice is to rely on abstract interfaces to achieve loose coupling.

Yes,optimizingaPHPapplicationispossibleandessential.1)ImplementcachingusingAPCutoreducedatabaseload.2)Optimizedatabaseswithindexing,efficientqueries,andconnectionpooling.3)Enhancecodewithbuilt-infunctions,avoidingglobalvariables,andusingopcodecaching

ThekeystrategiestosignificantlyboostPHPapplicationperformanceare:1)UseopcodecachinglikeOPcachetoreduceexecutiontime,2)Optimizedatabaseinteractionswithpreparedstatementsandproperindexing,3)ConfigurewebserverslikeNginxwithPHP-FPMforbetterperformance,4)

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Linux new version
SublimeText3 Linux latest version

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Zend Studio 13.0.1
Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
