كلاس للقراءة من والكتابة في ملف مضغوط من نوع 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);
ملاحظة:
في حالة قمت بضغط الملف فيجب عليك اختيار فك الضغط
وإلا سيتم عرض نص مشفر غير مفهوم
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);
}
}