好奇的
$files = glob(cacheme_directory()."*");
foreach($files as $file)
{
$filemtime=filemtime ($file);
if (time()-$filemtime>= 172800)
{
unlink($file);
}
}
我只是想确定代码是否正确。感谢。
答案 0 :(得分:80)
您应该添加is_file()
检查,因为PHP通常会列出.
and ..
,以及可能位于您正在检查的目录中的子目录。
此外,作为this answer suggests,您应该使用更具表现力的表示法替换预先计算的秒数。
<?php
$files = glob(cacheme_directory()."*");
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) >= 60 * 60 * 24 * 2) { // 2 days
unlink($file);
}
}
}
?>
或者您也可以使用DirectoryIterator
,as shown in this answer。在这个简单的情况下,它并没有真正提供任何优势,但它将是OOP方式。
答案 1 :(得分:48)
最简单的方法是使用DirectoryIterator:
<?php
if (file_exists($folderName)) {
foreach (new DirectoryIterator($folderName) as $fileInfo) {
if ($fileInfo->isDot()) {
continue;
}
if ($fileInfo->isFile() && time() - $fileInfo->getCTime() >= 2*24*60*60) {
unlink($fileInfo->getRealPath());
}
}
}
?>
答案 2 :(得分:9)
另一种更简单,更现代的方式,使用FilesystemIterator。
我正在使用&#39;日志&#39;以目录为例。
$fileSystemIterator = new FilesystemIterator('logs');
$now = time();
foreach ($fileSystemIterator as $file) {
if ($now - $file->getCTime() >= 60 * 60 * 24 * 2) // 2 days
unlink('logs/'.$file->getFilename());
}
主要优点是: DirectoryIterator返回虚拟目录&#34;。&#34;和&#34; ..&#34;在一个循环中。 但FilesystemIterator会忽略它们。
答案 3 :(得分:5)
我认为这更加整洁,更易于阅读和修改。
$expire = strtotime('-7 DAYS');
$files = glob($path . '/*');
foreach ($files as $file) {
// Skip anything that is not a file
if (!is_file($file)) {
continue;
}
// Skip any files that have not expired
if (filemtime($file) > $expire) {
continue;
}
unlink($file);
}
答案 4 :(得分:4)
对我来说是正确的。为清楚起见,我建议您将172800
替换为2*24*60*60
。
答案 5 :(得分:2)
请注意,如果目录中包含大量文件,则会遇到问题。
如果您认为这可能会对您产生影响,请考虑使用较低级别的方法,例如opendir
。
答案 6 :(得分:2)
/* Delete Cache Files Here */
$dir = "cache/"; /** define the directory **/
/*** cycle through all files in the directory ***/
foreach (glob($dir."*") as $file) {
//foreach (glob($dir.'*.*') as $file){
/*** if file is 24 hours (86400 seconds) old then delete it ***/
if (filemtime($file) < time() - 172800) { // 2 days
unlink($file);
}
}
希望对你有所帮助。
答案 7 :(得分:2)
这是一个如何以递归方式执行此操作的示例。
function remove_files_from_dir_older_than_x_seconds($dir,$seconds = 3600) {
$files = glob(rtrim($dir, '/')."/*");
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) >= $seconds) {
echo "removed $file<br>".PHP_EOL;
unlink($file);
}
} else {
remove_files_from_dir_older_than_x_seconds($file,$seconds);
}
}
}
remove_files_from_dir_older_than_x_seconds(dirname(__file__).'/cache/', (60 * 60 * 24 * 1) ); // 1 day
答案 8 :(得分:0)
EventsService
答案 9 :(得分:0)
(time()-filectime($path.$file)) < 172800 //2 days
如果当前时间和文件更改时间在172800秒以内,则。
if (preg_match('/\.pdf$/i', $file)) {
unlink($path.$file);
}
好吧,如果仍然有任何混淆,您只需更改第一行代码中的运算符即可。
答案 10 :(得分:0)
@maksim-t 回答可以改进一点:
// Initialize and add the map
function initMap() {
// The location of Uluru
let uluru;
let markers = []
let marker;
let maps;
uluru = { lat: -25.344, lng: 131.036 };
// The map, centered at Uluru
const map = new google.maps.Map(document.getElementById("map"), {
zoom: 4,
center: uluru,
});
//ajax call
$.ajax({
type: 'GET', //THIS NEEDS TO BE GET
url: '/ajaxmap',
success: function(maps) {
maps = maps;
for (let i = 0; i < maps.length; ++i) {
let uluru = {
lat: Number(maps[i]['latitude']),
lng: Number(maps[i]['longitude'])
};
if( maps[i]["admin_id"] == $(`#User_id`).data('id') || maps[i]["is_public"] == 1 || $(`#User_id`).data('role') == 'super' ){
addMarker(uluru, maps, i);
}
}
},
error: function() {
console.log(maps);
}
});
console.log(maps);
$("#more").click(function () {
markersnull();
console.log(maps);
for (let index = 0; index < maps.length; index++) {
addMarker();
}
});
function markersnull() {
for (let index = 0; index < markers.length; index++) {
markers[index].setMap(null);
}
}
function addMarker(coords, maps, i) {
marker = new google.maps.Marker({
position: coords,
map: map,
icon:{
path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z M -2,-30 a 2,2 0 1,1 4,0 2,2 0 1,1 -4,0',
fillColor: maps[i]['color'],
fillOpacity: 1.0,
strokeColor: '#000000',
strokeWeight: 1,
scale: 1,
anchor: new google.maps.Point(12, 24),
},
});
markers.push(marker);
attachSecretMessage(marker, maps, i);
};
}