الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استخدام php في إدارة أنظمة linux

بدأه Abd Allatif في 5 مايو 2013 · 3 رد · 1,871 مشاهدة · في نظام تشغيل Unix & Linux
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله و بركاته
هل تظن أن لغة php هي لغة خاصة ببرمجة تطبيقات الويب و لا يمكنها الخروج من نافذة المتصفح كما بقية scripting languages كلغة python و perl ؟!
إذا كنت تعتقد ذلك فإسمح لي أن أقول لك إنك لم تتطلع على كافة إمكانيات اللغة  :) , لربما هذا الكلام صحيحا منذ سنوات طوال لكن ليس الآن فبعد إطلاق إصدار php5 أصبحت php لغة برمجة بحق فأصبحت تدعم البرمجة غرضية التوجه (وإن لم يكن جميع خصائصها) و اصبحت سريعة للغاية , فما المانع من إستخدامها لادارة الأنظمة ؟
تسمح php من استدعاء مفسرها عن طريق الطرفية كما في باقي لغات scripting languages منذ الإصدار 4.3 و يمكنها الكتابة و القراءة من منافذ الدخل STDIN و الخرج STDOUT و الخطأ STDERR كما يمكنها أن تقبل الوسائط المُمررة إليها عند استدعاء الملف .
ما يلزمك قبل البدء :
طبعاً يلزم معرفة أساسيات php وكيفية استخدام المتغيرات و القراءة و الكتابة على الملفات و في حال القيام بالعمليات المعقدة يلزمك تعلم التعابير النظامية (يمكنك الإطلاع على كتاب "المدخل الى لغة php" الذي يُغطي اساسيات هذه المواضيع .
وبالطبع أي توزيعة linux و مفسر php ويمكنك الحصول عليه من المستودعات ويكون باسم php5-cli (طبعاً إن لم يكن لديك خادم ويب يحوي مفسر php) ولتنصيبه على التوزيعات المبنية على debian يمكنك استخدام هذا الأمر في الطرفية :

# apt-get install php5-cli

البنية الأساسية لملفات php التي يتم استدعاءها من الطرفية :
كما في سكربتات باقي اللغات يتم استخدام ما يُمسى shebang أو الرمز "#!" الذي يدل على مسار مفسر php (عادة ما يكون على المسار /usr/bin/php لكن لا ضير من استدعاء التعليمة which php) ومن ثم يتم كتابة سكربت php كالمعتاد :

#!/usr/bin/php<?php//php script contents?>

القراءة و الكتابة من (وعلى) الطرفية :
يوجد طريقتين للكتابة على الطرفية : الطريقة الأولى و الأسهل هي استخدام دوال الخرج العادية print أو print_r أو sprintf أو بالطبع الكلمة المحجوزة echo , أما الطريقة الثانية هي الكتابة على مجرى الخرج STDOUT عن طريق إحدى دوال الكتابة على الملفات fwrite أو fputs . المثال التالي يستعرض الطريقتين :

#!/usr/bin/php
<?php
echo "This is my first php-cli script :)\n";
fwrite(STDOUT, "This string is writen by fwrite function\n");
?>

أما للقراءة من الطرفية يتم استخدام إحدى دوال القراءة من الملفات fread أو fgets :

#!/usr/bin/php
<?php
echo "please enter your name : ";
$name = fgets(STDIN);
echo "Welcome mr.$name";
?>

الحصول على المتغيرات التي تُمرر الى البرنامج :
أغلب برامج سطر الأوامر يمكن تمرير مُختلف الوسائط إليها بعد اسم الملف , في php يمكن ذلك بكل سهولة عن طريق استخدام $_SERVER['argc'] التي تُحدد عدد الوسائط التي تم تمريرها الى السكربت بالطبع إن لم يتم تمرير أي وسيط ستكون لها القيمة 1 لأن اسم السكربت عادة يكون أول وسيط كما في باقي اللغات ; و المصفوفة $_SERVER['argv'] الذي يُمثل كل عنصر من عناصرها وسيطا من الوسائط (كما إتفقنا أول عنصر يكون دوماً اسم السكربت) :

#!/usr/bin/php
<?php
echo "listing program argrements : \n";
echo "----------------------------\n";
for($i = 1; $i < $_SERVER['argc']; $i++)    //you can use count($_SERVER['argv']) insted of $_SERVER['argc'] :)
{
    echo "$i arg value is : {$_SERVER['argv'][$i]}\n";
}
?>

 
بعد تعلم الأساسيات لنبدء الآن بتعلم كيفية دمج ما تعلمناه بعمليات بسيطة لها علاقة بإدارة الأنطمة
البحث عن قيمة في ملفات و استبدالها تلقائياً :
على الرغم من أن أي مستخدم متوسط ~ محترف في استخدام سطر الأوامر يمكنه عمل ذلك بسهولة لكن يمكن تبسيط الأمور أكثر و كتابة سكربت php للقيام بتلك المهمة :

#!/usr/bin/php
<?php
echo "listing program argrements : \n";
echo "----------------------------\n";
for($i = 1; $i < count($_SERVER['argv']); $i++)
{
    if(is_file($_SERVER['argv'][$i]))
    {
        $file = file_get_contents($_SERVER['argv'][$i]);
        $new_contents = str_replace('word1', 'word2', $file);
        file_put_contents($_SERVER['argv'][$i], $new_contents);
        echo "replaced all 'word1' in file {$_SERVER['argv'][$i]} with 'word2'\n";
    }
}
?>


طبعاً يتم استبدال جميع تكرارات الكلمة "word1" في ملف وليكن file.txt بالكلمة "word2" ويتم استدعاء السكربت على الشكل التالي :

$ ./srcipt.php file.txt

زيادة مرونة السكربتات : استدعاء أوامر النظام داخل سكربت php :
توفر php عدداً لا باس به من دوال التعامل مع الملفات التي يتشبه الى حدٍ ما أوامر نظام التشغيل نفسه (في الواقع هي مشتقة منه) , لكن في بعض الأحيان قد لا تجد الأمر المناسب إلا باستخدام تعليمات النظام نفسها على سبيل المثال إخذ نسخة إحتياطية من مجلد أو أكثر و جمعهم بأرشيف tar . لتنفيذ تعليمات على مستوى النظام يمكن استخدام احدى الدالتين exec أو system أو باسخدام رمز "`" الشهير :

#!/usr/bin/php<?phpecho `ls -la /`;?>

المثال السابق يُظهر المجلدات و الملفات في المجلد الرئيسي أو root dir .

#!/usr/bin/php
<?php
$name = 'archive.tar';
$files = '';
for($i = 1; $i < $_SERVER['argc']; $i++) 
{
    is_file($_SERVER['argv'][$i]) == true ? $files .= $_SERVER['argv'][$i]. ' ' : null;
}
echo "creating tar archive to the following files :\n";
echo "---------------------------------------------\n";
echo `tar zcvf $name $files`;
?>

هذا المثال بسيط للغاية (وغير مُفيد :P  لكنني لا أُريد تعقيد الأمور في الأمثلة) يقوم بإنشاء أرشيف من إمتداد tar.gz من قائمة الملفات التي تُمرر إليه .
القوة الحقيقة التي يمكن استخدام سكربتات php فيها هي عند اجراء تعديلات على قواعد البيانات (سواءٍ mysql أو غيرها) وعند التحكم بباقي الأجهزة بالشبكة عن طريق ssh

عن مقالي في مجتمع لينكس العربي

تم تعديل هذه المشاركة بواسطة Abd Allatif في 5 مايو 2013 في 20:27

3
#2

بل لإدارة Unix-like بشكل عام.

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

#3

موضوع رائع شكرا على هذه الفوائد

 

أنا شخصيا كنت أحسب أن البي أتش بي خاصة بالويب :)

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#4

السلام عليكم

 

لاأنكر أن ال PHP أصبحت أكثر تنظيما والكثير من الأشياء الجيدة في اللغة في الإصدار الخامس ولكن عن نفسي لاأراها مناسبة لإدارة النظام لعدة أسباب

 

1- اللغة ليست لغة عامة فهي "موجهة" للويب  -وهي جيدة في ذلك- حتى ولو توفرت بعض المكتبات التي تفتح مجالات أخرى مثل PHP-GTK أو غيرها -فكما ترى التطوير في هذه المكتبات ليس جادا نوعا ما-

2- اللغة لاتأتي بصورة إفتراضية مع لينكس ، متوفرة بالمستودعات ولكن ليست جزءا من النظام كلغة perl او python 

3- لم يتم إستبدل perl حتى الآن ببايثون ومازال لها الكثير من المستخدمين في ذلك المجال

 

بعد هذا الكلام، أجد أن PHP قد تكون مناسبة في مجالات ضيقة جدا من ناحية سطر الأوامر والنظام على سبيل المثال البرمجيات التي تدير إطارات العمل أثناء التطوير ، على سبيل المثال Symfony/Console او Command في yii أو Artisan 

1 −1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

مواضيع مشابهة