أداة تنفيذ المهام Phing

من منا لا يحلم بأتمتة حياته , نوافذ تفتح عن طريق تطبيقات الموبايل , ربوتات تقوم بتنظيف , أجهزة معقدة تطير حولك بانتظار إشارة منك ، ولكن ما زال ذلك بعيد المنال للإنسان العادي , ولكن بالنسبة لنا نحن المبرمجين هنالك ما هو أفضل … تعرف على Phing لأتمتة حياتك البرمجية.
logo

ما هو Phing ؟

هو أداة للأتمتة المهام بشكل عام مهما كانت تلك المهام ، بناء تطبيقك ، نشره على الويب ، جمع المعلومات إنشاء التقارير ، غيرها الكثير.

Phing  أداة مبنية بلغة البرمجة PHP فكرتها من أداة تنفيذ المهام Ant الشهيرة في عالم Java ، وهي تستخدم ملفات XML لتنفيذ مجموعة من المهام تأخذ شكل التوابع ، وتحتوي على مجموعة ضخمة من المهام المعدة مسبقاً لتسهيل الأمور عليك ، كمهام لتحديث قاعدة البيانات ، النشر عن طريق FTP ,SSH ، ومهام لتعامل مع أنظمة التحكم في النسخ (Version Control Systems) وغيرها الكثير جداً.

تنصيب Phing ؟

هنالك العديد من الطرق التي تستطيع فيها تنصيب Phing  يمكن الإطلاع على كافة الطرق من موقعهم الرسمي ، ولكن في هذا الموضوع سوف أقوم باستخدام Composer.

توجه إالى المجلد الجذر في مشروعك وقم بتعديل ملف composer.json

{
    "require-dev": {
        "phing/phing": "2.*"
    }
}

بعد ذلك أطلب من Composer تنصيب الحزمة الجديدة عن طريق تنفيذ الأمر التالي:

composer install

للتأكد من أن كل شئ سار على ما يرام قم بتنقيذ الأمر التالي وتأكد من أنك سوف تحصل على ذات النتيجة :

vendor/phing/phing/bin/phing -h
phing [options] [target [target2 [target3] ...]]
Options:
  -h -help               print this message
  -l -list               list available targets in this project
  -v -version            print the version information and exit
  -q -quiet              be extra quiet
  -verbose               be extra verbose
  -debug                 print debugging information
  -longtargets           show target descriptions during build
  -logfile <file>        use given file for log
  -logger <classname>    the class which is to perform logging
  -f -buildfile <file>   use given buildfile
  -D<property>=<value>   use value for given property
  -propertyfile <file>   load all properties from file
  -find <file>           search for buildfile towards the root of the
                         filesystem and use it
  -inputhandler <file>   the class to use to handle user input

Report bugs to <dev@phing.tigris.org>

استخدام Phing

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

vendor/phing/phing/bin/phing

فهم ملف build.xml

هو ملف XML طبيعي يخضع لجميع قواعد XML  المعروفة ، يبدأ Phing  بمعالجة هذا الملف بالبحث عن العقدة project  في هذا الملف وهي تخبر Phing  عن معلومات عامة عن هذا المشروع  كاسم المشروع و المهمة الأساسية فيه ، وربما تستطيع إدراج ملف متغيرات في هذا الجزء لتحكم بكامل المشروع ، كما في المثال التالي الذي يقوم بإدراج ملف المتغيرات.

<?xml version="1.0" encoding="UTF-8"?>
<project name="UsingPhingExample" default="main" basedir=".">
    
    <!-- إدراج ملف المتغيرات-->
    <property file="default.properties" />
    
    <!-- author طباعة المتغير-->
    <echo message="${author}" />
    
    <!-- ------------ -->
    
</project>

ملف المتغيرات ملف بسيط يمكن أن يكون شئ مشابه للشكل التالي مع استخدام متغيرات تناسب مشروعك طبعاً

author =  Hyyan Abo Fakher
db.host = 127.0.0.1
db.user = root
db.password = root
db.database = foobar
 
facebook.appId = 1234567890-10
facebook.secret = 1234567890qwertyuiopasdfghjkl

عندما يجد Phing العقدة project يقوم بتنفيذ المهمة  (Target) الأساسية المحددة في العقدة ، وهو في المثال السابق main.

 إن مهام Phing هي شكل من التوابع البسيطة كتوابع PHP  يمكن أن تأخذ متغيرات وتحتوي على جمل منطقية ولكن الفرق الوحيد لها عن توابع PHP  أنها لا يمكن أن تعيد قيمة.

الأن لنجعل التابع main  يقوم بإنشاء مجلد جديد

<?xml version="1.0" encoding="UTF-8"?>
<project name="UsingPhingExample" default="main" basedir=".">
    
    <!-- إدراج ملف المتغيرات-->
    <property file="default.properties" />
    
    <!-- author طباعة المتغير-->
    <echo message="${author}" />
    
    <target name="main">
        <echo msg="Creating new directory..." />
        <!-- إنشاء مجلد جديد-->
        <mkdir dir="newFolder" />
    </target>
    
</project>

الأن بإمكانك تشغيل Phing ليقوم بتنفيذ المهمة main ، لتحصل على نتيجة مماثلة لشكل الأتي :

vendor/phing/phing/bin/phing 
Buildfile: C:\wamp\www\subdomains\gwp\build.xml
 [property] Loading C:\wamp\www\subdomains\gwp\default.properties
     [echo] Hyyan Abo Fakher

UsingPhingExample > main:

     [echo] Creating new directory...
    [mkdir] Created dir: C:\wamp\www\subdomains\gwp\newFolder

BUILD FINISHED

Total time: 1.4872 second

وضع كل ما سبق معاً

لتكريس الفكرة العامة سوف أقوم بتوسيع المثال السابق ليقوم بالمهام التالية :

  1.  إدراج ملف المتغيرات
  2. إنشاء المهة الأساسية main  التي سوف تقوم بطلب باقي المهمات
  3. إنشاء مهمة تقوم بإنشاء مجلد جديد
  4. إنشاء مهمة تقوم بنقل ملفات المجلد الحالي إلى المجلد الجديد المنشئ
  5. ضغط المجلد الجديد بصيغة zip

في ملف default.properties :

# default.properties file
buildDir= .build

في ملف build.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project name="UsingPhingExample" default="main" basedir=".">
    
	
    <!-- إدراج ملف المتغيرات-->
	
    <property file="default.properties" />
    
	
     <!-- buildDir طباعة المتغير-->
	
    <echo message="Build Dir Was Set To : ${buildDir}" />
    
	
    <!-- المهمة الأساسية تقوم باستدعاء باقي المهام بالترتيب الصحيح-->
	
    <target name="main" depends="makeDir,copyFiles,compress" />
        
	
    <!-- هذه المهمة سوف تقوم بإنشاء مجلد جديد-->
	
    <target name="makeDir">
		
        <!-- إنشاء مجلد جديد-->
	    
        <mkdir dir="${buildDir}" />
    </target>
    
    
	
     <!-- تقوم بنسخ جميع ملفات المجلد الحالي إلى المجلد الجديد-->
	
    <target name="copyFiles">
        <copy todir="${buildDir}">
		
              <!-- للتحديد الملفات التي يجب نسخها من المجلد الحالي-->
		
            <fileset dir="."></fileset>
        </copy>
    </target>
	
    <!-- ضغط المجلد النهائي-->	
	
    <target name="compress">
        <zip destfile="project-build.zip" basedir="${buildDir}" />
    </target>
    
</project>

الأن قم بتشغيل Phing لتحصل على النتيجة التالية :

vendor/phing/phing/bin/phing
Buildfile: C:\wamp\www\subdomains\gwp\test.xml
 [property] Loading C:\wamp\www\subdomains\gwp\default.properties
     [echo] Build Dir Was Set To : .build

UsingPhingExample > makeDir:

    [mkdir] Created dir: C:\wamp\www\subdomains\gwp\.build

UsingPhingExample > copyFiles:

     [copy] Created 1 empty directory in C:\wamp\www\subdomains\gwp\.build
     [copy] Copying 7 files to C:\wamp\www\subdomains\gwp\.build

UsingPhingExample > compress:

      [zip] Building zip: C:\wamp\www\subdomains\gwp\project-build.zip

UsingPhingExample > main:


BUILD FINISHED

Total time: 1.9488 second

الملخص

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

حيان أبو فخر

مطور ويب سوري. عاشق للموسيقى والبرمجة والكوميديا الارتجالية.

مواضيع الكاتبموقع الكاتب

لمتابعة الكاتب:
TwitterFacebook

One thought on “أداة تنفيذ المهام Phing

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *