الأربعاء، 3 أغسطس 2011

كلاس للقراءة من والكتابة في ملف مضغوط من نوع gzip




كلاس للقراءة من والكتابة في ملف مضغوط من نوع 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);
    }
}


السبت، 16 أبريل 2011

dynamicdrive.com

موقع dynamicdrive.com

يختص بتقديم الإضافات الجمالية للموقع والتي تضيف اليها الحياة، وهذه بعض التصنيفات:

الثلاثاء، 12 أبريل 2011

الكتاب الذي تعلمت من خلاله لغة php

طبعاً الكتاب المترجم من دار الشعاع للنشر.. لكنه لم يعد موجوداً في موقعهم..
لذا بحثت عن اسم الكتاب بالانجليزي "موجود اسم الكتاب الانجليزي" في الطبعة العربية
صورة الكتاب:
http://www.amazon.com/gp/reader/1931841322/ref=sib_dp_pt#reader-link

والرابط لمن يريده كالتالي:
http://www.mediafire.com/?baoff9gibnia66x

تنظيم واستيراد الكلاسات من داخل الكلاسات:

يمكنك جعل الكلاس يدرج كلاس آخر ويصل الى كل طرقه،
وبالتالي سيمكنك ذلك من تنظيم كلاساتك..

طريقة العمل:

لنفترض أن لدينا الكلاس a على النحو التالي:

class a {
    function m1(){
        return "a [m1]";
    }
    function m2($x){
        return "a [m2][$x]";
    }
}



والكلاس b على النحو التالي:


class b {
    private $obj_name;
    private $obj;    
    
    function load($obj){
        if(class_exists($obj)){
            $this->obj_name = $obj;
            $this->obj = new $obj();           
        }
    }
    function get_method($method, $var=''){
        return $this->obj->$method($var);
    }
    function get(){
        $this->a = new a();
        echo $this->a->m1();
    }
    function get_obj(){
     return $this->obj;
    }
}



فإن لدينا عدة طرق للحصول على طرق الكائن a من خلال الكائن b:


$b = new b();
$b->load('a');
echo $b->get_method('m1');
echo '<br>';
echo $b->get_method('m2', 100);
echo '<br>';
$b->get();
echo '<br>';
echo $b->get_obj()->m2(200);


شرح الكلاس b:

1) المتغيرات:


private $obj_name;
    private $obj; 

- المتغير $obj_name يحفظ اسم الكلاس الذي سيتم استيراده
- المتغير $obj يحفظ الكائن (بعد التنفيذ)

شرح دوال الكلاس b:

الدالة load:

function load($obj){
        if(class_exists($obj)){
            $this->obj_name = $obj;
            $this->obj = new $obj();           
        }
    }


تتحقق من وجود الكلاس أولاً
تحتفظ باسم الكلاس في المتغير obj_name
تحتفظ بنسخة للكائن في المتغير obj



الدالة get_method:


function get_method($method, $var=''){
        return $this->obj->$method($var);
    }

تعيد طريقة من طرق الكائن المستورد مع امكانية تمرير وسيط


الدالة get

function get(){
        $this->a = new a();
        echo $this->a->m1();
    }



طريقة مباشرة للحصول على إحدى طرق الكائن المستورد


الدالة get_obj

function get_obj(){
     return $this->obj;
    }


طريقة للحصول على الكائن بكل طرقه

الأحد، 13 مارس 2011

الكعكات cookies

تستخدم لحفظ معلومات المستخدم حتى عند اغلاق المتصفح وفتحه من جديد فتظل المعلومات محفوظة، وكما هو موجود في معظم المواقع "إبقاء تسجيل الدخول مفعلاً" وبالتالي لا تحتاج لتسجيل الدخول في الموقع كل مرة.

التطبيق:


دالة حفظ المعلومات:

function save_data($name,$value,$time=3600){
    $expires = time()+($time);
    setcookie ($name , $value , $expires);
}



دالة حذف المعلومات:
function forget_data($name,$time=3600){
    $expires = time()-($time);
    setcookie ($name , '' , $expires);
}

دالة جلب المعلومات مثل معرفة اسم المستخدم
function get_data($name){
  return $_COOKIE[$name];
}

خوارزمية التعامل مع المستخدم:
$name = $_GET['name'];
$pass = $_GET['pass'];

if($_GET['do']=='logout'){
            forget_data("myname");
            forget_data("mypass");
            echo '<meta http-equiv="refresh" content="0; url='. $PHP_SELF .'" />';
}
elseif(isset($myname)&&isset($mypass)){
    echo "welcome `$myname` <a href=?do=logout>logout</a> 
";
}
else{

    if(isset($name)&&isset($pass)){
            save_data("myname" , $name );
            save_data("mypass" , $pass);
            echo '<meta http-equiv="refresh" content="0; url='. $PHP_SELF .'" />';
    }else{
      echo '
      <form method="get">
<input name="name" />
      <input name="pass" type="password" />
      <input value="login" type="submit" />
      </form>
';
    }

}

الاثنين، 29 نوفمبر 2010

الكلاسات

نبذة عامة عن الكلاسات:
سميت البرمجة الكائنية التوجه بهذا الاسم لأنها تشبه الكائنات في طريقة عملها.. تستطيع أن تجد تفاصيل كثيرة عن الكائنات من خلال البحث، لكني أريد أن اكتب مختصرا مفيداً بعيداً عن الاطالة.

تعريف الكلاس:
اعتقد أنك تعرف التعامل مع الدوال وتريد تطوير قدراتك البرمجية بتعلم الكلاسات والبرمجة الكائنية..
ومن هنا فيمكنني تعريف الكلاس "بأنه مجموعة دوال مترابطة مع بعضها البعض وتملك ذاكرة مشتركة"
ربما لا يتفق معي البعض على هذا التعريف ، لكنه لا يتناقض من وجهة نظري مع نظرية عمل الكلاسات.

شرح التعريف:
تسمى الدوال طرق والمتغيرات خصائص
يملك ا لكلاس متغيرات ودوال و (أحداث في لغات برمجية أخرى مثل فيجوال بيسك)
يمكن للدالة قراءة المتغير وتغيير قيمته.
ويمكن للدالة الحصول على متغيرات من خلال الوسطاء (من خارج الكلاس)
يمكن للدالة الاستعانة بدالة أخرى داخل الكلاس..
يمكن للكلاس جلب كلاس آخر والاستفادة من دواله أو طرقه..

ما الفرق بين الكلاس والكائن:
الكلاس هو سكريبت يحتوي على الخصائص والطرق وكيفية عملها.
الكائن : هو استخدام ذلك الكلاس.
ببساطة الكائن يشبه المتغير والكلاس يشبه محتوى المتغير.
$var = "value";




مثال:
أولاً  : الكلاس

class myClass{
   var $x = 1;
   var $y = 2;
   var $sum;

    function get_x_val(){
        return $this->x;
    }

    function set_x_val($value){
        $this->x = $value
    }
    function get_y_val(){
        return $this->y
    }
    function set_y_val($value){
        $this->y = $value
    }
    function sum(){
        $this->sum = $this->x + $this->y;
        return $this->sum;
    }
}

ثانياً: انشاء كائن:
$c = new myClass();

echo $c->get_x_val();    // print 1

echo $c->get_y_val();    // print 2 

echo $c->sum();               // print 3 

$c->set_x_val(10);

echo $c->get_x_val();    // print 10 

$c->set_y_val(20);

echo $c->get_y_val();    // print 20 

echo $c->sum();    // print 30

الأربعاء، 30 يونيو 2010

تسهيل كتابة برامجك

هل جربت أن تسهل على نفسك العمل بواسطة الدوال، أم أنت من الذين يكتبون برامجهم كل مرة من الصفر॥
حقيقة دعني اريك طريقة لتسهل على نفسك كتابة برنامجك।
سنقوم بكتابة دوال بسيطة لتقوم بالاعمال المملة التي نقوم بها دائماً ، وسأسميها الدوال المساعدة..
دائماً عند كتابتك لبرنامج ما تحتاج الى استخدام الجداول، وسيكون برنامجك بعد استخدام الدوال المساعدة بالشكل التالي..

table ();
tr ();
td ();
write your codes here..
xtr ();
xtable ();
هل لاحظت السهولة الآن ، ويمكنك تبسيطها أكثر بواسطة الكلاسات.. وسيتم شرحها في وقت لاحق.



واليك دالتين آخريين:

function br($n=1){ for($i=1; $i<=$n; $i++){echo '<b r />';} }

function hr(){echo '<hr />';} 
من خلال الأولى تستطيع عمل سطور فارغة لعدد معين والدالة الثانية لعمل خط افقي وسيكون التطبيق على النحو التالي:
br (3);
hr ();

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates | تعريب وتطوير : قوالب بلوجر معربة