Thaimisc.com : เล่นกับไฟล์ (2)
ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us | Colocation | Web Hosting | เปิดร้านค้าฟรี


Category : Php Developer Print Article Only Print Aticle With Comment
เล่นกับไฟล์ (2)
เขียนโดย เดอะกาฝากไดอารี่ (ball@bbznet.com) , 10-08-2004

ผมอาจจะต้องหายหน้าหายตาไปอีกซักพักนะครับ ช่วงนี้สมาธิแตกซ่านบ่อยๆ ทำให้งานไม่ค่อยเดิน คงต้องไปนั่งทำสมาธิให้หนักแน่นๆ หน่อย แล้วมุปั่นงานชดเชยจากที่อู้มาเสียที

filesize()
ฟังก์ชันนี้จะเป็นฟังก์ชันที่เอาไว้หาขนาดของไฟล์ครับ เป็นฟังก์ชันที่มีประโยชน์ในหลายๆ ด้านทีเดียว ไม่ว่าจะเป็นในกรณีของการเขียนโค้ดบริหารจัดการไฟล์บนเซิร์ฟเวอร์ หรือที่หลายๆ คนเรียกว่า file manager หรือจะประยุกต์เอาไว้สำหรับหาขนาดของโฟลเดอร์ใดๆ ก็ได้ โดยการวนลูปเพื่อเอาค่าขนาดของไฟล์ทั้งหมดมารวมกัน (สงสัยได้คุยกันยาวแหง กับฟังก์ชันนี้)

ก่อนจะคุยกันยาว คงต้องพูดถึงวิธีการใช้ก่อนครับ... ง่ายๆ เลย ก็คือรูปแบบการใช้งานก็แค่

filesize("พาธ และชื่อของไฟล์")

ลองใช้งานง่ายๆ ก็ลองสร้างโฟลเดอร์ขึ้นมาซักโฟลเดอร์ สมมติคือ C:/AppServ/www/test/ เจ้าเก่าที่ผมชอบใช้... (อันนี้ติ๊ต่างตัวอย่างโดยเหมาเอาว่า ผู้อ่านใช้ชุดโปรแกรม AppServ ในการจำลองเว็บเซิร์ฟเวอร์ และ PHP นะครับ) จากนั้นก็ลอง copy ไฟล์อะไรไปวางเอาไว้เยอะๆ ดู (ใช้โปรแกรมอะไรก็ตามสะดวกครับ อย่างผม ผมสะดวกใช้ Windows Explorer นั่นแหละ)... ตอนนี้หากเราเปิดดูโฟลเดอร์นี้ ด้วยโปรแกรม Windows Explorer เราก็จะเห็นประมาณแบบนี้ละ

(จากตัวอย่าง ผมลอง copy ไฟล์รูปภาพที่ถ่ายมาตอนไปเที่ยวประมาณ 10 กว่ารูป มาลองของ อิอิ)

ให้เราทำการลากเมาส์เพื่อ highlight รูปทั้งหมด แล้วคลิกขวา แล้วเลือก properties ดูครับ (ดูรูปประกอบ)

เราจะได้เห็นหน้าต่าง properties ของไฟล์ทั้งหมด ซึ่งจะบอกข้อมูลให้เราทราบว่า มีจำนวนไฟล์เท่าไหร่ และที่สำคัญคือ ไฟล์ทั้งหมด รวมกันแล้วมีขนาดเป็นเท่าไหร่ครับ (ดูรูปประกอบอีกที)

จากที่เห็น เราจะเห็นว่าไฟล์มีขนาด 5,522,477 - 5,545,984 ไบต์ (แล้วแต่ว่าเป็น size แท้จริง หรือ size ตามที่ปรากฏบนฮาร์ดดิสก์) ให้จำเลขนี้เอาไว้นะครับ เพื่อเราจะได้ลองดูว่า ของจริงเป็นเท่าไหร่... อ้อ! ที่แสดงขั้นตอนนี้ให้เห็นก็เพราะว่า เดี๋ยวเราจะต้องใช้ขั้นตอนการเช็คขนาดของไฟล์นี้ เพื่อพิสูจน์ว่าโค้ดของเราทำงานได้จริงนั่นเอง

เอาละ พักเรื่องของการดูขนาดไฟล์ทั้งหมดในโฟลเดอร์เอาไว้ก่อน เพราะจากตรงนี้ไปเราจะพูดถึงการดูขนาดของไฟล์ทีละไฟล์ก่อนครับ

ลองเขียนโค้ดง่ายๆ ต่อไปนี้ จากนั้นก็เซฟลง C:/AppServ/www/test/ ในชื่อ index.php แล้วรันผลดูทางบราวเซอร์นะครับ (หากชื่อไฟล์ซ้ำกับตอนบทก่อนๆ แล้วไม่อยากบันทึกทับไป ก็เปลี่ยนชื่อตามอัธยาศัย แต่ขอให้จำเอาไว้ให้ได้แล้วกัน ว่าเปลี่ยนเป็นชื่ออะไรนะครับ)

<?php

//ชื่อไฟล์ไม่ต้องเขียนตามผมนะครับ ขอให้เลือกซักไฟล์ที่คุณ copy มาวางไว้
echo "ไฟล์ CIMG0018.JPG มีขนาด ". filesize("CIMG0018.JPG"). " ไบต์";

?>

ผลที่ได้จากการรันก็คือ ขนาดของไฟล์ CIMG0018.JPG โดยมีหน่วยเป็นไบต์นั่นเองครับ (ใครเขียนโค้ดตามผมเป๊ะๆ แล้วผลไม่ได้ หรือออกมามีค่าเป็น 0 นั่นก็เพราะ คุณเล่นลอกโค้ดผมเป๊ะๆ นะครับ... ดูให้ดีๆ คุณมีไฟล์ชื่อ CIMG0018.JPG อยู่ในเครื่องหรือเปล่า -_-'')

มาถึงตรงนี้ อาจจะเห็นประโยชน์ของมันในเรื่องนึงชัดๆ แล้วก็คือ ในการเขียนโค้ดอัพโหลดไฟล์ ฟังก์ชันนี้แหละครับ จะช่วยเราได้ ในกรณีที่เราต้องการจำกัดขนาดของไฟล์ที่จะอัพโหลดไปเก็บบนฝั่งเซิร์ฟเวอร์ได้ (นึกถึงกรณีของไดอารี่ออนไลน์ หรือเว็บบอร์ดบางแห่ง ที่มีการจำกัดขนาดของไฟล์เอาไว้ที่ 100KB บ้าง อะไรพวกเนี้ย) หลักการมันก็แค่ เขียนฟอร์มรับการอัพโหลดไฟล์ จากนั้นก็อัพโหลดไฟล์ไปเก็บไว้ชั่วคราวบนเซิร์ฟเวอร์ก่อน จากนั้นก็เช็คดูว่าไฟล์นั้นๆ มีขนาดเกินกำหนดหรือไม่ หากไม่เกิน ก็ให้นำไปบันทึกลงตามที่ที่ต้องการ แต่หากเกิน ก็ไม่ต้องทำอะไร (ไฟล์ชั่วคราวนั้น เมื่อถึงเวลาหนึ่งๆ มันก็จะโดนลบไปเอง)

นอกจากนี้เวลาที่แสดงรายการชื่อไฟล์ ก็สามารถใช้ฟังก์ชันนี้ในการแสดงรายละเอียดได้ว่า ไฟล์นี้มีขนาดเป็นเท่าไหร่ด้วยครับ... พูดมาถึงตรงนี้แล้ว ก็เลยนึกขึ้นมาได้อีกฟังก์ชันนึงซึ่งน่าสนใจทีเดียว แต่เป็นฟังก์ชันที่ใช้ได้ใน PHP เวอร์ชันตั้งแต่ 4.3.0 เป็นต้นไปนะครับ (ปัจจุบัน PHP 5.0 แล้ว) นั่นก็คือ mime_content_type() ครับ

mime_content_type()
เป็นฟังก์ชันที่เอาไว้ตรงสอบประเภทของไฟล์ครับ แต่ก่อนที่จะใช้ฟังก์ชันนี้ได้ คงต้องลองไปสำรวจไฟล์ php.ini ก่อนนะครับ ว่ามีการกำหนดค่าให้ใช้งานได้หรือยัง โดยให้ทำตามนี้ครับ

  • หาคำว่า extension=php_mime_magic.dll ให้เจอก่อน เอาเครื่องหมาย ; ข้างหน้าออก (ถ้ามี) เพื่อเป็นการบอกกับ PHP ให้รู้ว่า เราจะใช้ extension ตัวนี้
  • จากนั้นให้หาคำว่า mime_magic.magicfile นะครับ ซึ่ง
    • หากมีแล้ว ก็ให้กำหนด path ของไฟล์ magic.mime ลงไป เช่น กรณีของผม ไฟล์ magic.mime นี้จะอยู่ที่ C:AppServphp ครับ ผมก็จะกำหนดเป็น mime_magic.magicfile = "C:AppServphpmagic.mime" ไป ส่วนท่านผู้อ่านท่านใดที่ดาวน์โหลด PHP มาติดตั้งเอง น่าจะอยู่ที่ C:php เลยครับ
    • หากยังไม่มี ให้เพิ่ม mime_magic.magicfile = "C:AppServphpmagic.mime" ลงไปเองเลย (path นั้นอาจจะเปลี่ยนแปลงได้ หากท่านผู้อ่านไม่ได้ติดตั้ง PHP ผ่านชุดโปรแกรม AppServ เหมือนอย่างผม)


เช็คดูให้ดีๆ ว่ามีไฟล์ magic.mime หรือเปล่าด้วยนะครับ

จากนั้นลองเพิ่มโค้ดลงไปต่อจากโค้ดตัวอย่างข้างต้นดูดังนี้

<?php

//ชื่อไฟล์ไม่ต้องเขียนตามผมนะครับ ขอให้เลือกซักไฟล์ที่คุณ copy มาวางไว้
echo "ไฟล์ CIMG0018.JPG มีขนาด ". filesize("CIMG0018.JPG"). " ไบต์";
echo "<br>";
echo "ไฟล์ CIMG0018.JPG มีประเภทของไฟล์เป็น ". mime_content_type("CIMG0018.JPG");

?>

ผมจะได้ผลลัพธ์เป็นดังนี้ครับ

ไฟล์ CIMG0018.JPG มีขนาด 383521 ไบต์
ไฟล์ CIMG0018.JPG มีประเภทของไฟล์เป็น image/jpeg

หมายความว่า ขนาดของไฟล์ CIMG0018.JPG คือ 383,521 ไบต์ และมีประเภทเป็น ไฟล์รูป JPEG (image/jpeg) นั่นเองครับ... หากท่านผู้อ่านเอาไฟล์อื่นๆ มาเรียกตรวจสอบ ก็อาจจะได้ขนาดของไฟล์เป็นอย่างอื่น และ/หรือ ประเภทของไฟล์เป็นอย่างอื่นเช่นเดียวกัน

ตัวอย่างของไฟล์ประเภทอื่นก็เช่น

  • .gif ก็จะเป็น image/gif
  • .png ก็จะเป็น image/png
  • .zip ก็จะเป็น application/zip
  • .txt ก็จะเป็น text/plain
  • .php ก็จะเป็น text/plain เช่นกัน
  • .exe เป็น application/x-ms-dos-executable

เป็นต้น... ลองเอาไปเล่นสนุกๆ คอยหาดูว่า ไฟล์นามสกุลอะไร มีชื่อประเภทเป็นอะไรกันดูนะครับ :)

(ติดตามตอนต่อไป)

<- Back | Next ->

ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us
Copyright 1999-2006 Thailand Miscellaneous. Allrights reserved. webmaster@thaimisc.com