检查名称是否以 PHP 中的字符串结尾
Check if name ends by string in PHP
在我的文件夹缓存中,我有几十个名为 filename-number.json
的文件,例如
sifriugh-80.json
dlifjbhvzique-76.json
dfhgzeiuy-12.json
...
我有一个简单的脚本,每 2 小时清理一次缓存目录,删除超过 2 小时的文件:
$fileSystemIterator = new FilesystemIterator('cache');
$now = time();
foreach ($fileSystemIterator as $file) {
if ($now - $file->getCTime() >= 3 * 3600) // 2 hours
unlink('cache/' . $file->getFilename());
}
现在,我希望每 2 小时删除一次文件,其编号(在 .json
之前,但如果文件开头存在编号则不会)不以 -100.json
结尾,以及以 -100.json
结尾的那些,仅每 7 天一次。
我知道我可以使用 preg_match()
来获取名称,但是有什么有效的方法来执行它吗?
我不明白你为什么不应该使用 preg_match
。这里真好。
在使用 preg_match
之前,您应该检查文件名中的第一个符号,如果是 is_numeric
,则跳过下一个代码。
如果它不是数字你只需要得到结尾“-”可以呈现零或一个+数字1个或更多数字+ .json结尾
(模式可以是这样的/-?\d+\.json$/
)
之后你可以解析它并知道.json之前的实数,
您的验证类似于
如果“-”符号存在且数字为 100,请检查 7 天的日期
如果数字不是 100,请检查日期 2 小时
有比使用 PHP 8+ str_ends_with()
的正则表达式更简单的方法:https://www.php.net/manual/en/function.str-ends-with.php
if (str_ends_with($file->getFilename(), '100.json)) {
// unlink at needed time
} else {
// unlink at needed time
}
对于PHP7,有几种方法可以模拟,查看https://www.php.net/manual/en/function.str-ends-with.php
底部
在我的文件夹缓存中,我有几十个名为 filename-number.json
的文件,例如
sifriugh-80.json
dlifjbhvzique-76.json
dfhgzeiuy-12.json
...
我有一个简单的脚本,每 2 小时清理一次缓存目录,删除超过 2 小时的文件:
$fileSystemIterator = new FilesystemIterator('cache');
$now = time();
foreach ($fileSystemIterator as $file) {
if ($now - $file->getCTime() >= 3 * 3600) // 2 hours
unlink('cache/' . $file->getFilename());
}
现在,我希望每 2 小时删除一次文件,其编号(在 .json
之前,但如果文件开头存在编号则不会)不以 -100.json
结尾,以及以 -100.json
结尾的那些,仅每 7 天一次。
我知道我可以使用 preg_match()
来获取名称,但是有什么有效的方法来执行它吗?
我不明白你为什么不应该使用 preg_match
。这里真好。
在使用 preg_match
之前,您应该检查文件名中的第一个符号,如果是 is_numeric
,则跳过下一个代码。
如果它不是数字你只需要得到结尾“-”可以呈现零或一个+数字1个或更多数字+ .json结尾
(模式可以是这样的/-?\d+\.json$/
)
之后你可以解析它并知道.json之前的实数,
您的验证类似于
如果“-”符号存在且数字为 100,请检查 7 天的日期
如果数字不是 100,请检查日期 2 小时
有比使用 PHP 8+ str_ends_with()
的正则表达式更简单的方法:https://www.php.net/manual/en/function.str-ends-with.php
if (str_ends_with($file->getFilename(), '100.json)) {
// unlink at needed time
} else {
// unlink at needed time
}
对于PHP7,有几种方法可以模拟,查看https://www.php.net/manual/en/function.str-ends-with.php
底部