จะลบไฟล์ที่อยู่ใน dir ที่มีอยู่ทั้งหมด

เริ่มโดย technomatch, 10 มีนาคม 2008, 12:44:27

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

technomatch

คือว่าจะลบไฟล์แคชอะ แล้วใช้ครอนจ๊อบเป็นตัวรันมีสคิปง่ายๆมั้ยครับ...เจอของบอร์ดนอกแล้วงง  :P

tarnroma


            $dir = SITE_PATH . "cache/";
  $dh = opendir($dir);  
  while (($file = readdir($dh)) !== false) {
  $prename = explode(".", $file);  
  $stime = time() - @filemtime($dir.$file);
if( $stime > 3000 and $prename[1] == "tmp" ) {
if(!unlink($dir.$file))
{
  error("Unable to Delete File In Directory, did you chmod the cache directory?");
}
}  
  }
  closedir($dh);


เป็น Script ลบไฟล์ ใน Directory โดยจะลบเฉพาะไฟล์ที่เก่ากว่า แล้วแต่จะกำหนดครับ ตัวอย่างผมกำหนดไว้ ให้ลบเฉพาะไฟล์ ที่เก่ากว่า 3000 วินาที
โดยไฟล์ที่จะลบต้องมีนามสกุล เป็น tmp เท่านั้น
YES

technomatch


ThaNaButS

อ้างถึงจาก: tarnroma ใน 10 มีนาคม 2008, 13:01:41

            $dir = SITE_PATH . "cache/";
  $dh = opendir($dir);  
  while (($file = readdir($dh)) !== false) {
  $prename = explode(".", $file);  
  $stime = time() - @filemtime($dir.$file);
if( $stime > 3000 and $prename[1] == "tmp" ) {
if(!unlink($dir.$file))
{
  error("Unable to Delete File In Directory, did you chmod the cache directory?");
}
}  
  }
  closedir($dh);


เป็น Script ลบไฟล์ ใน Directory โดยจะลบเฉพาะไฟล์ที่เก่ากว่า แล้วแต่จะกำหนดครับ ตัวอย่างผมกำหนดไว้ ให้ลบเฉพาะไฟล์ ที่เก่ากว่า 3000 วินาที
โดยไฟล์ที่จะลบต้องมีนามสกุล เป็น tmp เท่านั้น

และถ้าเราจะลบทุกนามสกุลอะคับทำไง !! :D

ball6847

เอาไว้เคลียร์แคชหรอคับ เอาแบบดิบๆเลยมะ scandir แล้ว unlink ให้หมด  ;D ;D


<?php

$dir 
'cache';

$list scandir($dir);

foreach(
$list as $file)
{
    
$filepath $dir.'/'.$file;
    if(
file_exists($filepath)) @unlink($filepath);
}


?>



ยังไม่ได้ลองเหมือนกัน อิอิ
ลบให้เกลี้ยง  ;D
PHP5 เน้อ
We use Ubuntu.

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]

EThaiZone

อันนี้มันส์กว่า php4 ได้

<?

$list = glob("cache/*.*");

foreach($list as $var){
unlink($var);
}

?>


glob()
http://www.thaiseoboard.com/index.php/topic,6920.msg241386.html#msg241386

ball6847

อ้างถึงจาก: EThaiZone ใน 10 มีนาคม 2008, 14:15:24
อันนี้มันส์กว่า php4 ได้

<?

$list = glob("cache/*.*");

foreach($list as $var){
unlink($var);
}

?>


glob()
http://www.thaiseoboard.com/index.php/topic,6920.msg241386.html#msg241386

โอ้ววว เพิ่งจะรู้ว่ามีฟังก์ชั่นนี้ด้วย เจ๋งวุ้ยยยย

ขอบคุงหลายๆ กลับมาเปิดกระทู้นั้นต่อเถอะ
We use Ubuntu.

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]

EThaiZone

เปิดไม่หว่ายยย  :D

จริงๆ กะไปทำเว็บแยกออกมา แต่ตอนนี้ชักชี้เกียจแล้ว  :D

tarnroma

ใช้ glob ดีกว่าจริงๆ ใส่ Pattern ได้ด้วย

$list = glob("cache/*.tmp");


ผมเห็นควรด้วยว่าควรเปิด กระทู้ในตำนานนั้นกลับมา
YES

technomatch

#9
ป๊าดด.........ดันไว้......เด๋ว.....กลับมาเอา...

ขอบคุณทุกท่านคร้าบบบ....อ่า..แล้วไฟล์...

มันไม่มีนามสกุลอะครับ

มันเป็นลักษณะตัวอักษรยาวๆนี่ลบได้มั้ย.........

แบบนี้อะ

0124a5b6524c521a4563212c563a2b


หรือ chmod เป็นอะไรมั่งครับ พอดีลองแล้วมันไม่ได้อะ
ตอนนี้ลบแบบ ธรรมดาไปก่อน
ผมเอาไฟล์ใส่ไว้ก่อนdir cache หนึ่งระดับถูกต้องมั้ยครับ.....
หรือถ้าไฟล์มากๆมันจะลบไม่ได้
เพราะว่าเปิดด้วย ftp dir/cacheเจอไทม์เอ้าท์เลยครับ

:P

ball6847

#10
อ้างถึงจาก: technomatch ใน 10 มีนาคม 2008, 19:21:39
ป๊าดด.........ดันไว้......เด๋ว.....กลับมาเอา...

ขอบคุณทุกท่านคร้าบบบ....อ่า..แล้วไฟล์...

มันไม่มีนามสกุลอะครับ

มันเป็นลักษณะตัวอักษรยาวๆนี่ลบได้มั้ย.........

แบบนี้อะ

0124a5b6524c521a4563212c563a2b


หรือ chmod เป็นอะไรมั่งครับ พอดีลองแล้วมันไม่ได้อะ
ตอนนี้ลบแบบ ธรรมดาไปก่อน
ผมเอาไฟล์ใส่ไว้ก่อนdir cache หนึ่งระดับถูกต้องมั้ยครับ.....
หรือถ้าไฟล์มากๆมันจะลบไม่ได้
เพราะว่าเปิดด้วย ftp dir/cacheเจอไทม์เอ้าท์เลยครับ

:P

เอ...ไม่แน่ใจนะคับ

dir ที่จะลบไฟล์ chmod ด้วยนะเคิ้บ เป็นอะไรก็ได้ที่มันลบได้  :P อะไรก็ไม่รู้แหละ ผม 777 ลูกเดียว  ;D

ถ้าไฟล์ไร้ตระกูล (ไม่มีนามสกุล)

คิดว่าน่าจะเปลี่ยนตรง pattern แบบนี้มั้ง


<?php

$list 
glob("cache/*");

foreach(
$list as $var){
   if(
is_file($var)) @unlink($var);
}

?>





ประมาณนี้น่าจะได้มั้งคับ มั่วๆจัดไป learning by doing  ;D ;D
We use Ubuntu.

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]

EThaiZone

ถ้าลบไฟล์ไม่มีนามสกุล อย่าใช้ glob ครับ
เพราะมันจะเรียกชื่อโฟลเดอร์มาด้วย (ต้องปลอดภัยไว้ก่อน)

<?php
$d 
dir("cache");
while (
false !== ($entry $d->read())) {
   if(
$entry<>"." && $entry<>".." && is_file($entry)) @unlink($entry);
}
$d->close();
?>


ปล. glob มีข้อเสียคือไม่รองรับ path ที่ยาวเกิน 255 ตัว (ถ้าจำไม่ผิดนะครับ เคยเจอ error แบบนี้มา)
ดังนั้นเราใช้ฟังค์ชั่นอื่นจะเมหาะกว่าในบางงานครับ

technomatch

อ้างถึงจาก: ball6847 ใน 10 มีนาคม 2008, 19:40:48
อ้างถึงจาก: technomatch ใน 10 มีนาคม 2008, 19:21:39
ป๊าดด.........ดันไว้......เด๋ว.....กลับมาเอา...

ขอบคุณทุกท่านคร้าบบบ....อ่า..แล้วไฟล์...

มันไม่มีนามสกุลอะครับ

มันเป็นลักษณะตัวอักษรยาวๆนี่ลบได้มั้ย.........

แบบนี้อะ

0124a5b6524c521a4563212c563a2b


หรือ chmod เป็นอะไรมั่งครับ พอดีลองแล้วมันไม่ได้อะ
ตอนนี้ลบแบบ ธรรมดาไปก่อน
ผมเอาไฟล์ใส่ไว้ก่อนdir cache หนึ่งระดับถูกต้องมั้ยครับ.....
หรือถ้าไฟล์มากๆมันจะลบไม่ได้
เพราะว่าเปิดด้วย ftp dir/cacheเจอไทม์เอ้าท์เลยครับ

:P

เอ...ไม่แน่ใจนะคับ

dir ที่จะลบไฟล์ chmod ด้วยนะเคิ้บ เป็นอะไรก็ได้ที่มันลบได้  :P อะไรก็ไม่รู้แหละ ผม 777 ลูกเดียว  ;D

ถ้าไฟล์ไร้ตระกูล (ไม่มีนามสกุล)

คิดว่าน่าจะเปลี่ยนตรง pattern แบบนี้มั้ง


<?php

$list 
glob("cache/*");

foreach(
$list as $var){
   if(
is_file($var)) @unlink($var);
}

?>


ประมาณนี้น่าจะได้มั้งคับ มั่วๆจัดไป learning by doing  ;D ;D


โอ๊ววววววววววววววววววว ทำได้แล้วคร้าบ.......ขอบคุณมากๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆครับ
ตอนแรกก็ลองลบไฟล์ในdirที่สร้างเองแล้วโยนไฟล์ใส่ไปสามสี่อันมันลบได้ครับ...
แต่ไฟล์ไร้ชาติตระกูลนี่ลบไม่ได้....ลองทำอย่างที่บอกใช้การได้ทันทีเลยครับ

ขอบคุณมากๆคร้าบ จ๊วบส์ๆ

ลองอันนี้แล้วมันไม่ยอมลบอะครับ  :P
<?php
$d 
dir("cache");
while (
false !== ($entry $d->read())) {
   if(
$entry<>"." && $entry<>".." && is_file($entry)) @unlink($entry);
}
$d->close();
?>

EThaiZone

#13
เขียนแบบไม่ได้เทส แหะๆ  :P เอาใหม่

<?php
$target 
"cache";
$d dir($target);
while (
false !== ($entry $d->read())) {
   if(
$entry<>"." && $entry<>".." && is_file($target."/".$entry)) @unlink($target."/".$entry);
}
$d->close();
?>


ปล. glob เป็นเหมือนการอ่านรวดเดียวจบ  ถ้าไฟล์เยอะๆ จะใช้เวลาทำงานนานนะครับ
และผล่านเมมไปด้วย ถ้าไฟล์เป็นหมื่นหรือแสนอะ  :P

ปล2. มะกี้ผมก็ลืมไป โฟลเดอร์ไม่สามารถโดนลบด้วย unlink ได้ ต้องใช้ rmdir ในการลบโฟลเดอร์  :D

technomatch

อ้างถึงจาก: EThaiZone ใน 10 มีนาคม 2008, 20:02:18
เขียนแบบไม่ได้เทส แหะๆ  :P เอาใหม่

<?php
$target 
"cache";
$d dir($target);
while (
false !== ($entry $d->read())) {
   if(
$entry<>"." && $entry<>".." && is_file($target."/".$entry)) @unlink($target."/".$entry);
}
$d->close();
?>


ปล. glob เป็นเหมือนการอ่านรวดเดียวจบ  ถ้าไฟล์เยอะๆ จะใช้เวลาทำงานนานนะครับ
และผล่านเมมไปด้วย ถ้าไฟล์เป็นหมื่นหรือแสนอะ  :P

ปล2. มะกี้ผมก็ลืมไป โฟลเดอร์ไม่สามารถโดนลบด้วย unlink ได้ ต้องใช้ rmdir ในการลบโฟลเดอร์  :D


มาคอนเฟิร์มครับ.....โค๊ดล่าสุด ใช้การได้แระ...ขอบคุณอีกครั้งครับ....
ที่มาคือว่า ผมเพิ่งสังเกตุว่าทำไมเวบเรามันเปลืองจัง...ไปเปิดดูในแคช เพียบเลย....
แต่มีปัญหาว่าจะตามลบมันยังไงดี....เพราะปั๊มไว้หลายตัว...และจะมีมาอีกเรื่อยๆ
ก็เลยต้องหาวิธีด่วนเลยครับ เปิดตามบอร์ดเมืองนอกก็ได้โค๊ดมาครับ...
แต่ใช้ไม่ได้.เพราะมันเป็น php5...........ไม่รู้จะคุยกะเค้ายังไง
เคยแต่อ่านreadmeในสคิป....แต่ขั้นสนทนานี่ยังไม่เคย.......

สรุปมาตายรัง.........

ขอบคุณทุกท่านด้วยครับ หวังว่าถ้ามีใครถามแบบผมหรือหาข้อมูลแบบนี้อยู่...

คงได้ประโยชน์กันนะครับ................