لقد قمت دائمًا بتشغيل PHP في وضع ISAPI. أكبر عيب في هذه الطريقة هو ضعف استقرارها. عندما يحدث خطأ في PHP، ستموت عملية Apache أيضًا. لاحقًا، رأيت مقدمة على الإنترنت حول تشغيل PHP في وضع FastCGI، والمزايا المتنوعة المذكورة (الاستقرار، والأمان، والأداء العالي) جعلتني أقرر تجربتها.
ومع ذلك، كانت الأمور بعيدة عن أن تسير بسلاسة كما كان متوقعا. لقد بحثت في Google مرات لا تحصى ولكن لم أتمكن من العثور على أي معلومات حول كيفية استخدام Apache + FastCGI لتشغيل PHP ضمن Windows. هناك عدد لا بأس به من الأشخاص الذين يستخدمون IIS + FastCGI لتشغيل PHP. ذكرت إحدى المقالات أن Zend توصي أيضًا بتشغيل PHP في وضع FastCGI ( http://phplens.com/phpeverywhere/fastcgi-php ).
وبعد عدة ساعات من الاستكشاف، نجحت أخيرًا في تطبيق Apache 1.3 + FastCGI لتشغيل PHP.
تحضير:
قم أولاً بزيارة http://www.fastcgi.com/dist/ لتنزيل mod_fastcgi لـ Apache. أنا أستخدم mod_fastcgi-2.4.2-AP13.dll. بعد التنزيل، انسخ هذا الملف إلى دليل وحدات Apache.
قم بتنزيل PHP (أنا أستخدم PHP-5.0.4) وقم بفك ضغطه، وقم بتعديل ملف php.ini حسب الحاجة. لاحظ أنك لا تحتاج إلى نسخ أي ملفات من دليل PHP إلى دليل Windows.
تعديل التكوين:
ثم قم بتعديل الملف httpd.conf وأضف الأسطر التالية:
LoadModule fastcgi_module Modules/mod_fastcgi-2.4.2-AP13.dll
الاسم المستعار للسيناريو /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" - العمليات 3
# ملاحظة: -العمليات 3 هنا تعني بدء ثلاث عمليات php-cgi.exe.
# للحصول على المعلمات التفصيلية لـ FastCgiServer، يرجى الرجوع إلى وثائق FastCGI.
تطبيق AddType/x-httpd-fastphp5 .php
تطبيق الإجراء/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# الوصف: قم بتعديل الكلمتين الغامقتين أعلاه وفقًا لموقع ملف PHP الخاص بك.
بعد اكتمال التعديل، ما عليك سوى إعادة تشغيل Apache.
التعليمات:
وفقًا لتجاربي العديدة، فإن المشكلات الأكثر شيوعًا تنتج بشكل أساسي عن المسارات. لذا تحقق أولاً من صحة جميع المسارات في ملفات php.ini وhttpd.conf. والثاني هو أنه إذا تم تثبيت PHP في النظام من قبل، فيجب إعادة تسمية C:Windowsphp.ini أو حذفه.
ثانيًا، تحقق مما إذا كان الدليل الذي يوجد به ملف PHP يحتوي على أذونات كافية (لقد قمت بتعيينه على الجميع - التحكم الكامل، على أي حال، لا تحتاج إلى مراعاة العديد من القيود الأمنية على أجهزة التطوير).
مزايا تشغيل PHP في وضع FastCGI:
هناك العديد من الفوائد الرئيسية لتشغيل PHP في وضع FastCGI. الأول هو أنه عندما يفشل PHP، فلن يؤدي ذلك إلى إسقاط Apache، ولكن عملية PHP نفسها ستتعطل (لكن FastCGI سيعيد تشغيل عملية PHP جديدة على الفور لتحل محل العملية المتعطلة). ثانيًا، يتمتع وضع FastCGI بأداء أفضل عند تشغيل PHP مقارنة بوضع ISAPI (لقد استخدمت ApacheBench في الأصل للاختبار، لكنني نسيت حفظ النتائج. إذا كنت مهتمًا، يمكنك اختباره بنفسك).
وأخيرًا، يمكنك تشغيل PHP5 وPHP4 في نفس الوقت. بالرجوع إلى ملف التكوين أدناه، تم إنشاء مضيفين افتراضيين، أحدهما يستخدم PHP5 والآخر يستخدم PHP4.
وحدات LoadModule fastcgi_module/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" - العمليات 3
الاسم المستعار للسيناريو /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
الاستماع 80
NameVirtualHost *:80
DocumentRoot d:/www
فهارس الخيارات FollowSymlinks MultiViews
اسم الخادم php5.localhost
AddType application/x-httpd-fastphp5 .php
تطبيق الإجراء/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
خيارات الفهرس FancyIndexing FoldersFirst
فهارس الخيارات FollowSymLinks MultiViews
السماح بتجاوز لا شيء
الأمر بالسماح والرفض
السماح من الجميع
الاستماع 8080
الاسم VirtualHost *:8080
DocumentRootd:/www
فهارس الخيارات FollowSymlinks MultiViews
اسم الخادم php4.localhost
AddType application/x-httpd-fastphp4 .php
تطبيق الإجراء/x-httpd-fastphp4 "/fcgi-php4/php.exe"
فهارس الخيارات FollowSymLinks MultiViews
السماح بتجاوز لا شيء
الأمر بالسماح والرفض
السماح من الجميع
باستخدام التكوين أعلاه، يتم استخدام PHP5 عند الوصول إلى http://localhost/ ، ويتم استخدام PHP4 عند الوصول إلى http://localhost:8080/ . لذا، طالما تم تكوينه بشكل صحيح، يمكن للمضيفين الظاهريين المختلفين استخدام إصدارات مختلفة من PHP.
بعض عيوب وضع FastCGI:
وبعد الحديث عن المزايا، دعونا نتحدث عن العيوب. من خلال استخدامي الفعلي، يعد وضع FastCGI أكثر ملاءمة للخوادم في بيئات الإنتاج. لكنها ليست مناسبة لآلات التطوير. لأنه عند استخدام Zend Studio لتصحيح أخطاء البرنامج، سيعتقد FastCGI أن عملية PHP قد انتهت، وسيُرجع خطأ 500 على الصفحة. كان هذا مزعجًا جدًا لدرجة أنني عدت مرة أخرى إلى وضع ISAPI على جهاز التطوير الخاص بي.
وأخيرًا، هناك ثغرة أمنية محتملة في وضع FastCGI على نظام التشغيل Windows. نظرًا لأنني لم أجد طريقة لتنفيذ SuEXEC في بيئة Windows، فإن عملية PHP تعمل دائمًا بأعلى الامتيازات، ومن الواضح أن هذه ليست أخبارًا جيدة من منظور أمني.
خاتمة:
لا يزال تطبيق FastCGI في هذه المقالة في مرحلة أولية للغاية، ويستخدم فقط كنقطة بداية، على أمل ظهور حلول أكثر نضجًا.