PDA

View Full Version : سوال: پاك كردن فايل هاي تاريخ گذشته



ravand
جمعه 09 دی 1390, 20:57 عصر
سلام
يه جا با يه تمرين php برخورد كردم كه سوالش برام جالبه و دلم ميخواد حلش كنم.
ولي جوابي كه به سوال داده ، يه سري كد هست كه اكثرش اشتباه داره. اگه آكولاد هاش رو دقت كنيد همه اش اشكال داره. معلوم نيست كجا باز شده كجا بسته است. آخرشم فكر ميكنم اگه مشكلش رو حل كنم كار نكنه.
اگه ميشه كمكم كنيد .
اين سوال :
برنامه ای بنویسید که فایل هایی را که از 10 روز قبل مورد دسترسی قرار گرفته اند را از دایرکتوری مربوطه حذف کند.

راهنمايي كه كرده : تابع (مسیر) File a time : آخرین زمان دسترسی به فایل مورد نظر را به ما می دهد.
جواب سوال:

<?php
function clean files($directory){
$dir=opendir($directory){
while(($file=readfile($dir)){
if(is_file($directory."/".$file)){
$accesstime-fileatime($direactory."/".$file);
$time=time();
if(($time-$accesstime)>10*24*60*60)
{ if (unlink($directory."/"$file)
{
printf("file %s is removed from %s directory<br>\n",
$file ,$directory);
}
else if(is_dir($directory."/".$file)&&
($file !=".")&&($file !="..")){
clean files($directory."/".$file);
}}
clean files("C:\header");
//"G:\php"
?>

ravand
یک شنبه 11 دی 1390, 11:48 صبح
الان براي چاپ تاريخ دسترسي به فايل از كد زير استفاده ميشه :

date("Y m d H:i:s",filemtime('test.txt'));

براي حذف فايل هم از اين كد:

unlink('test.txt');

حالا من چجوري بنويسيم كه ده روز پيش رو حساب كنه؟
كه اگه ده روز پيش به اين فايل دسترسي شده اين فايل پاك بشه.

irGeek
یک شنبه 11 دی 1390, 13:00 عصر
راه حل:

function GetDaysBefor($sStartDate, $sDayBefor){
// Firstly, format the provided dates.
// This function works best with YYYY-MM-DD
// but other date formats will work thanks
// to strtotime().
$sStartDate = gmdate("Y-m-d", strtotime($sStartDate));

// Start the variable off with the start date
$aDays[] = $sStartDate;

// Set a 'temp' variable, sCurrentDate, with
$sCurrentDate = $sStartDate;

for($i=0;$i <= $sDayBefor;$i++){
$sCurrentDate = gmdate("Y-m-d", strtotime("-1 day", strtotime($sCurrentDate)));

$aDays[] = $sCurrentDate;
}


return $aDays[$sDayBefor];
}
نحوه استفاده: به اولین پارامتر تاریخ دلخواه وبه پارامتر دوم تعداد روزی که می خواهید برگردید عقب رو می دی

كه اگه ده روز پيش به اين فايل دسترسي شده اين فايل پاك بشه.
GetDaysBefor('2010-02-20',10)
نتیجه تابع تاریخ مورد نظر شماست!بقیه اشم که خودت اوستایی.
اولش که گفتی
فايل هاي تاريخ گذشتهیاد کنسرو افتادم. ولی سوال جالبی بود!

ravand
یک شنبه 11 دی 1390, 13:36 عصر
خيلي ممنون داداش
ولي من از كدهاي شما چيزي نفهميدم شايد به اين دليل باشه كه مبتدي ام.
يه سري كد نوشتم كه خيلي ساده است.

<?php
$das=date("Y m d H:i:s",filemtime('test.txt'));
$time = time() - 864000;
$ghabl=date('Y/m/d',$time);
if($das<$ghabl){
unlink('test.txt');
}else{
echo "به اين فايل ده روز پيش دسترسي پيدا نشده است";
}
?>
الان من امدم و در اين خط تاريخ دسترسي به فايل test.txt رو درون متغيير $das ريختم .

$das=date("Y m d H:i:s",filemtime('test.txt'));

بعد امدم در خط بعدي زمان جاري رو از ده روز كم كردم:

$time = time() - 864000;

و سپس زمان ده روز قبل رو درون متغيير ريختم:

$ghabl=date('Y/m/d',$time);

در خط بعدي يه شرط گذاشتم و در خط بعد هم با دستور unlink پاك بشه

irGeek
یک شنبه 11 دی 1390, 17:17 عصر
function CleanUpDir($dir,$date){
$handle=opendir("$dir");
while ($filename = readdir($handle)!==false)
{
if ($filename != "." && $filename != ".."){
if (file_exists($filename)) {
if( date("Y-m-d", fileatime($filename))===GetDayBefor($Date, 10))
{
unlink($filename) ;
}
}

}
}
closedir($handle);
}
پارامتر اول آدرس پوشه ‚پارامتر دوم تاریخی که فایل دقیقا 10 روز قبل دستیابی شده.
بدون تست کد زدم اگه مشکلی داشت گزارش بدید!