كلاس للقراءة من والكتابة في ملف مضغوط من نوع gzip
طريقة العمل:
إنشاء كائن gzip وتحديد مكان الملف المضغوط
إذا لم يكن الملف موجود سيتم انشاءه في حالة الكتابة
// Creat object and select gzip file: $gz = new gzip('tmp/somefile.txt.gz');
الكتابة الى الملف المضغوط وتحديد مستوى الضغط
من صفر الى تسعة
// Write to gzip file and select compress level: echo $gz->write("hello every body,\nI'm in a gzip file..\nthats fun! ", 9);
القراءة من الملف المضغوط
الطريقة الافتراضية readFile() تعيد مصفوفة بالسطور
وبدون فك للضغط
// Read form gzip file as array: #echo ''; print_r( $gz->readFile() ); echo '';
قراءة الملف كاملاً بشكل نص وليس مصفوفة
// Read from gzip file as string: #$gz->readFile('all');
القراءة من ملف مضغوط واختيار أن يتم فك الضغط
// Read from gzip file as string and select to uncompress: echo $gz->readFile('all', true);
قراءة عدد معين من الحروف واختيار أن يتم فك الضغط
// Read 'x' chars from gzip file as string and select to uncompress: #echo $gz->readData(17, true);
ملاحظة:
في حالة قمت بضغط الملف فيجب عليك اختيار فك الضغط
وإلا سيتم عرض نص مشفر غير مفهوم
يعمل هذا الكلاس على الاصدارة : PHP Version 6.0.0-dev بدون مشاكل
للاصدارات الأقدم استخدم:
للاصدارات الأقدم استخدم:
echo ( $gz->readFile('eof', true) );
الكلاس:
/************ * Author : hisham dalal* Date : 2011-07-15 *************/ class gzip{ private $filename; private $link; function __construct($filename){ $this->setFile($filename); } private function setFile($filename){ $this->filename = $filename; } private function open($type='r'){ $this->link = gzopen($this->filename, $type); //w9 return $zp; } function write($data, $compressLevel=-1){ if($compressLevel>-1){ $data = gzcompress($data, $compressLevel); } $this->open('w9'); return gzputs ($this->link, $data); } function readData($length, $uncompress=false){ $this->open('r'); // read $length char $data = gzread($this->link, $length); #echo $s; if($uncompress){ $data = gzuncompress($data); } return $data; } function readFile($type='array', $uncompress=false){ $this->open('r'); // output until end of the file. ob_start(); switch($type){ case 'array': echo gzfile($this->filename); break; case 'all' : gzpassthru($this->link); break; case 'eof' : readgzfile($this->filename); break; } $r = ob_get_contents(); ob_clean(); if($uncompress){ $data = gzuncompress($r); return $data; } return $r; } function __destruct(){ gzclose($this->link); } }