Zip Encoding Class
Zip Encoding Class เป็นคลาสที่ยอมให้คุณสร้างข้อมูลที่ถูกบีบอัดอยู่ใน Zip โดยสามารถดาวโหลดไปยังเครื่องของคุณหรือเซฟลงไดเรคทอรี่
เริ่มต้นใช้คลาส
เหมือนคลาสอื่นๆของ CodeIgniter คลาส Zip นั้นเริ่มต้นได้ในตัวบควมคุม(controller) โดยใช้ฟังก์ชัน $this->load->library
$this->load->library('zip');
เมื่อโหลดแล้วคุณสามารถใช้ออบเจ็คบีบอัดได้โดยการใช้ $this->zip
ตัวอย่างวิธีการใช้งาน
นี้คือตัวอย่างวิธีบีบอัดไฟล์และเซฟมันลงโฟลเดอร์ในเซิร์ฟเวอร์ และดาวโหลดมันสู่เครื่องของคุณ
$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);
// Write the zip file to a folder on your server. Name it "my_backup.zip"
$this->zip->archive('/path/to/directory/my_backup.zip');
// Download the file to your desktop. Name it "my_backup.zip"
$this->zip->download('my_backup.zip');
ฟังก์ชันอ้างอิง
$this->zip->add_data()
ยอมให้คุณเพิ่มข้อมูลลงใน Zip โดยพารามิเตอร์ตัวแรกจะต้องมีชื่อที่คุณอยากจะตั้ง และพารามิเตอร์ที่สองจะต้องมีข้อมูลเป็นสตริง
$name = 'my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
คุณสามารถที่จะเรียกมันหลายๆครั้งได้เพื่อเพิ่มหลายๆไฟล์ลงที่เก็บไฟล์ได้ (Zip Archive)ตัวอย่างเช่น
$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);
$name = 'mydata2.txt';
$data = 'Another Data String!';
$this->zip->add_data($name, $data);
หรือใส่หลายไฟล์เป็นอาเรย์
$data = array(
'mydata1.txt' => 'A Data String!',
'mydata2.txt' => 'Another Data String!'
);
$this->zip->add_data($data);
$this->zip->download('my_backup.zip');
ถ้าคุณอยากจะบีบอัดข้อมูลที่อยู่ในโฟลเดอร์ย่อย ให้รวมเส้นทางไปอยู่ในชื่อไฟล์ด้วย
$name = 'personal/my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
ตัวอย่างด้านบนจะวาง my_bio.txt ไปอยู่โฟลเดอร์ที่เรียกว่า personal
$this->zip->add_dir()
ยินยอมให้คุณเพิ่มไดเรคทอรี่ โดยปกติแล้วฟังก์ชันนี้เป็นฟังก์ชันที่ไม่ค่อยสำคัญเท่าไร เพราะคุณสามารถใส่ข้อมูลไปยังโฟลเดอร์ได้เลยอยู่แล้วด้วย $this->zip->add_data() แต่ถ้าคุณอยากสร้างโฟลเดอร์ว่างละก็สามารถทำได้ ดังตัวอย่าง
$this->zip->add_dir('myfolder'); // Creates a folder called "myfolder"
$this->zip->read_file()
ยอมให้คุณบีบอัดข้อมูลไฟล์ที่มีอยู่แล้วสักแห่งบนเซิร์ฟเวอร์ของคุณ โดยใส่เส้นทางไฟล์และคลาส zip จะอ่านมันและนำมันใส่เข้าไปในที่เก็บไฟล์
$path = '/path/to/photo.jpg';
$this->zip->read_file($path);
// ดาวโหลดไฟล์ไปยังเครื่องของคุณ และมันมีชื่อว่า "my_backup.zip"
$this->zip->download('my_backup.zip');
ถ้าคุณต้องการให้ที่เก็บในไฟล์ Zip มีไดเรคทอรี่เหมือนเดิม ให้ใส่ TRUE (boolean) ไปในพารามิเตอร์ที่สอง ตัวอย่างเช่น
$path = '/path/to/photo.jpg';
$this->zip->read_file($path, TRUE);
// ดาวโหลดไฟล์ไปยังเครื่องของคุณ และมันมีชื่อว่า "my_backup.zip"
$this->zip->download('my_backup.zip');
ตัวอย่างด้านบน photo.jpg จะถูกใส่ไว้ภายใต้สองโฟลเดอร์ path/to/
$this->zip->read_dir()
ยินยอมให้คุณบีบอัดโฟลเดอร์ (และข้อมูลด้านใน) ที่มีอยู่แล้วสักแห่งบนเซิร์ฟเวอร์ของคุณ โดยใส่ตำแหน่งของไดเรคทอรี่และคลาส zip จะทำงานอ่านไฟล์ไปเรื่อยๆและสร้างมันเป็นไฟล์ Zip ซึ่งมีไฟล์ทั้งหมดอยู่ ร่วมถึงโฟลเดอร์ย่อยที่อยู่ภายในนั้นด้วย
$path = '/path/to/your/directory/';
$this->zip->read_dir($path);
// ดาวโหลดไฟล์ไปยังเครื่องของคุณ และมันมีชื่อว่า "my_backup.zip"
$this->zip->download('my_backup.zip');
$this->zip->archive()
เขียนไฟล์ที่ถูกเข้ารหัส Zip ไปยังไดเรคบนเซิร์ฟเวอร์ของคุณ โดยใส่เส้นทางบนเซิร์ฟเวอร์ที่ถูกต้องและลงท้ายด้วยชื่อไฟล์ ให้คุณดูให้แน่ใจด้วยว่าไดเรคทอรี่นั้นสามารถถูกเขียนได้ (666 หรือ 777 จะสามารถใช้ได้) ตัวอย่างเช่น
$this->zip->archive('/path/to/folder/myarchive.zip'); // สร้างไฟล์ชื่อ myarchive.zip
$this->zip->download()
ไฟล์ Zip จะถูกดาวโหลดจากเซิร์ฟเวอร์ของคุณ โดยฟังก์ชันจะต้องใส่ชื่อที่คุณต้องการให้ Zip ไฟล์นั้นถูกเรียก ตัวอย่างเช่น
$this->zip->download('latest_stuff.zip'); // ไฟล์จะมีชื่อว่า "latest_stuff.zip"
ข้อสังเกตุ: อย่าแสดงข้อมูลอะไรก็ตามในส่วนควบคุม (Controller) ที่มีการเรียกฟังก์ชันนี้เพราะมันจะส่งหัวข้อมูล ซึ่งจะทำให้สามารถถูกดาวโหลดได้และไฟล์จะถูกดูเป็นไฟล์ไบรารี่
$this->zip->get_zip()
คือข้อมูลไฟล์ Zip ที่ถูกบีบอัดแล้ว โดยทั่วไปคุณไม่ต้องการใช้ฟังก์ชันนี้ ยกเว้นว่าคุณต้องการทำอะไรกับข้อมูลซึ่งเป็นอันหนึ่งอันเดียวกัน ตัวอย่างเช่น
$name = 'my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();
$this->zip->clear_data()
คลาส Zip จะแคชข้อมูล zip ของคุณดังนั้นมันไม่จำเป็นที่จะต้องคอมไพล์ใหม่ในการใช้ฟังก์ชันด้านบน อย่างไรก็ตามถ้าคุณต้องการสร้างหลายไฟล์ซิป โดยข้อมูลแตกต่างกัน คุณสามารถล้างข้อมูลแคชระหว่างที่เรียกได้ ตัวอย่างเช่น
$name = 'my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();
$this->zip->clear_data();
$name = 'photo.jpg';
$this->zip->read_file("/path/to/photo.jpg"); // อ่านข้อมูลของไฟล์
$this->zip->download('myphotos.zip');