متغيرات بيئة PHP. كل ما تحتاج لمعرفته حول متغيرات البيئة في ترجمة PHP
انتباه! يتم كتابة المقالة تحت Windows 7، ولكن الاختلافات الأساسية في إضافة PHP في متغيرات البيئة في الإصدارات الأخرى (نافذة XP، نظام التشغيل Windows Vista، Windows 8، ...) رقم
معلومة! سيتم الإشارة إلى جميع المسارات الموجودة في الإعدادات على أساس حقيقة أنه تم تثبيت Denwer في مجلد D: / Web. عند استخدام البيانات من المقالة، لا تنس تغيير هذا المسار الخاص بك.
لسهولة استخدام php. في وحدة التحكم في Windows، تحتاج إلى تكوين متغيرات البيئة. خلاف ذلك، عند العمل مع PHP من خلال وحدة التحكم، بدلا من الأمر PHP، ستحتاج إلى كتابة المسار الكامل إلى ملف php.exe.
افترض أن Denwer مثبت في مجلد D: / Web.
مع زر الماوس الأيمن على أيقونة الكمبيوتر، خصائص:
معلمات النظام الإضافية:
علامة التبويب "المتقدمة"، "المعلمات الأربعاء":
مجموعة " معلمات النظام"حدد متغير المسار وانقر فوق الزر" تحرير ":
إضافة سلسلة d: \\ web \\ usr \\ local \\ php5؛ وانقر فوق "موافق":
إعادة تشغيل دنور. الآن يمكنك فتح وحدة التحكم (WIN + R وأدخل CMD) وتحقق pHP العمل أدخل الأمر:
لتصحيح هذه الأخطاء، افتح ملف D: / Web/USR/Local/php5/php.ini. ابحث عن المتغيرات extension_dir، zend_extension، session.save_path وتعيين القيم التالية لهم.
بيئة متغيرة
متغيرات البيئة في PHP
مباشرة قبل بدء السيناريو، ينقل الخادم بعض متغيرات البيئة مع المعلومات. في بعض المتغيرات، تحتوي على بعض العناوين الرئيسية، ولكن ليس كل ذلك (من المستحيل الحصول على جميع الرؤوس). بعد ذلك، سأقدم قائمة بالمتغيرات البيئية الأكثر أهمية.
http_accept.
في هذا المتغير المدرجة جميع أنواع mime من البياناتوالتي يمكن أن ينظر إليها على المتصفح. الصف * / * يعني أن المتصفح يفهم أي نوع.
http_accept \u003d image / gif، image / x-xbitmap، image / jpeg، image / pjpeg، تطبيق / x-shockwave-flash، التطبيق / vnd.ms-Excel، التطبيق / MSWORD، * / *
http_referer.
يمثل هذا المتغير معلومات حول الصفحة جاء المستخدم بهذا. يمكن استخدام هذا المتغير، على سبيل المثال، لتتبع حركة المستخدم وفقا لموقعك، ثم عرض الطرق الأكثر شعبية.
http_referer \u003d http://www.spravkaweb.ru/php/pril/
http_cookie.
يتم تخزين جميع ملفات تعريف الارتباط في هذا المتغير في ترميز URL.
http_cookie \u003d hotlog \u003d 1؛ ZdedeBuggerResent \u003d PHP، PHTML، PHP3؛ ب \u003d ب؛ phpsessid \u003d 16805922A9258CDA274316E60F649CF8.
http_user_agent.
يحدد متصفح المستخدم. لإنشاء نوع متصفح تحتاج إلى التحقق من هذه السلسلة لوجود الكلمات: إذا كان المتصفح هو متصفح الانترنت.ستكون Substring MSIE موجودة، وإذا كانت كلمة Mozilla فقط متاحة، فهذا هو Netscape.
على سبيل المثال:
http_user_agent \u003d mozilla / 4.0 (متوافق؛ MSIE 6.0؛ Windows NT 5.1؛ SV1؛ Myie2؛ Maxthon)
http_host.
يتضمن اسم النطاق خادم الويب الذي يبدأ البرنامج النصي. هذا المتغير مناسب بما فيه الكفاية للاستخدام، على سبيل المثال، لتوليد المسار الكامل المطلوب في رأس الموقع لعدم إرفاقه بخادم معين.
http_host \u003d www.spravkaweb.ru.
http_from.
عنوان بريد إلكتروني مستخدم أرسل طلبا.
اسم الخادم.
اسم المجال أو عنوان IP خادم.
server_name \u003d www.spravkaweb.ru.
Server_Software.
اسم وإصدار برنامج الخادم المطابق لطلب العميل.
Server_Port.
يحتوي هذا المتغير على منفذ الخادم الذي تناوله مستعرض المستخدم. عادة ما يكون هذا 80. يمكن أيضا استخدام المتغير لتوليد المعلمة رأس الموقع.
server_protocol.
يحتوي المتغير على اسم وإصدار بروتوكول المعلومات الذي تم استخدامه للطلب.
server_protocol \u003d http / 1.1
Remote_addr.
يحتوي هذا المتغير على عنوان IP (أو اسم مجال) لعقود المستخدم التي تم فيها إطلاق المستعرض.
Remote_port.
المنفذ الذي تم تأمينه بواسطة متصفح المستخدم لتلقي استجابة الخادم.
Remote_user.
اسم مستخدم التعريف إرسال طلب.
script_name.
يحتوي على اسم الملف الذي يحتوي على هذا البرنامج النصي. هذا المتغير مناسب للاستخدام عند إنشاء رأس الموقع عند إعادة توجيه (إعادة التوجيه الذاتي)، وكذلك لاستبدال قيمة سمة TAG الإجراء
جذر المستند.
كتالوج الجذر لشجرة وثيقة الويب.
طلب_method.
الطريقة التي ينطبق عليها المستخدم أثناء نقل البيانات. تجدر الإشارة إلى أن السيناريو المختص يجب أن يحدد على أساس هذا المتغير، والطريقة التي ستستخدمها المستخدم وتلقي البيانات من المصدر المقابل، وليس لحساب أن النقل سيتم تنفيذه، على سبيل المثال، فقط من قبل المنشور فقط طريقة.
query_string.
يحتوي على المعلمات التي يتم الإشارة إليها في عنوان URL بعد علامة الاستفهام. أذكر أنها متوفرة على حد سواء مع طريقة الحصول على طريقة النشر (إذا كانت في الحالة الأخيرة، تم تحديدها في سمة Action Tag
path_info.
يحتوي على معلومات إضافية حول المسار.
path_translated.
نفس المعلومات كما هو الحال في المتغير path_info. مع إعداد البادئة المسار إلى كتالوج الجذر لشجرة مستندات الويب.
نوع المحتوى.
نوع وسائل الإعلام من البيانات.
طول المحتوى.
إرجاع عدد البايتات من البيانات المرسلة من قبل المستخدم. يجب تحليل هذا المتغير إذا كنت تشارك في مكتب الاستقبال ومعالجة النموذج.
gateway_interface.
نسخة CGI التي يستخدمها الخادم.
مثال على استخدام متغيرات البيئة
المتغيرات المحيطة:
echo "Вы пришли из: ".getenv("HTTP_REFERER")."
"؛ $ br \u003d getenv (" http_user_agent ")؛ إذا (strops ($ br،" msie ")! \u003d\u003d false) صدى" لديك Internet Explorer
"؛ Echo آخر" لديك Netscape أو غيرها.
"؛ صدى" IP الخاص بك: ".getenv (" Remote_addr ")."
"؛ ECHO" هنا هي المعلمات في خط المتصفح: ".getenv (" Query_string ")؛\u003e
هذا هو القصير كيفية تنفيذ تكوين خدمة PHP، اعتمادا على البيئة التي يعمل فيها. سأكون سعيدا إذا كان شخص ما يحكي محللا أكثر أناقة أو يصحح في تفاهات.
الفكرة الرئيسية
تشغيل الخدمة والموجهر والشركات التابعة داخل نظام إيكولوجي قابل للتكوين باستخدام متغيرات البيئة.مشكلة
في هذه المقالة، تتكرر "متغيرات البيئة" عدة مرات.من مربع PHP-FPM يتجاهل متغيرات البيئة العالمية (وظيفة Getenv)، في حين أن PHP CLI يمكن أن تتلقى لهم.
ما قبل التاريخ.
يمكن تخطي هذا القسم إذا كنت قد عملت بالفعل مع S.NV
في هذه اللحظة أنا أعمل في مشروع مكتوب في ZF2. تم استخدام ملفات التكوين لبيئات مختلفة لتكوين المشروع. يولد هذا عددا كبيرا من التكرارات للتكوين في مستودع المشروع في هذا النوع تقريبا:
- session.global.php.
- session.local.php.dist.
- session.unittest.php.dist.
- db.global.php.
- db.local.php.dist.
- db.unittest.php.dist.
لذلك، يأخذ المشروع الآن في الاعتبار البيئة، ولكن ...
في حين أن التطوير قد أجريت على آلات العمل، فإن مشروع القراءة. ملف THINV وكل شيء يعمل. ولكن عندما تكشف عن بيئة الاختبار، اتضح أنه إذا طلبت من متغيرات البيئة النظامية الدائمة، فإن PHP-FPM يتجاهلها. تم تخفيض الوصفات المختلفة من Google و Stackoverflow إلى أتمتة أو أتمتة أخرى لاستخدام طريقتين المعروفين:1. نقل المتغيرات عبر اختبار nginx fastcgi_param thingenv
2. تثبيت المتغيرات في تنسيق ENV في تكوين PHP-FPM Workflow Pool.
الخيار الأول والثاني مناسب لبعض المواقف الخاصة. ولكن إذا كنت تفكر في نموذج "تكوين يوم الأربعاء، وليس تطبيقا"، فانتقلت هذه الأساليب إلى أن تكون أكثر صعوبة بكثير مما كانت عليه على سبيل المثال، ما عليك سوى وضع ملف .env في مجلد مع المشروع. ولكن بعد كل شيء، Orchestator، نظام CI أو فقط مدير النظام لا ينبغي أن أعرف تفاصيل تنفيذ المشروع، وهذا ليس أنيقا.
طريقة الحل المقترحة
الجمع بين الوصفات المختلفة من الشبكة، باعت حل العمل التالي.تم اختباره بموجب Centos 7، PHP 5.6.14.
1. افتح /etc/pp.ini - استبدال variables_order \u003d "GPCS" على المتغيرات_ القداس \u003d "EGPCS" # بعد ذلك، ستضيف PHP إلى متغيرات بيئة الفضاء العالمية # http://php.net/manual/eni.core. PHP # ini.variables-order 2. افتح /etc/php-fpm.d/www.conf، لا يجب الخلط بينه مع /etc/php-fpm.conf (في أنظمة مختلفة ربما في مكان مختلف، هذا هو التكوين من مجموعة WWW-Proceses ل PHP-FPM. - إضافة (أو استبدال، إذا كان هناك فجأة): Clear_Env \u003d لا # قم بإيقاف تشغيل تنظيف المتغيرات العالمية ل Warkers أطلقت 3. قم بتعيين متغيرات البيئة اللازمة إلى / إلخ / بيئة (بناء الجملة القياسي A \u003d B) 4. LN - FS / ETC / ESCHION / ETC / SYSCONFIG / PHP-FPM # الآن تكوين المتغيرات الساحرة ستكون خدمة PHP-FPM مجرد رابط إلى التكوين العالمي 5. SystemCtl DAEMON-REDAID && Service PHP-FPM إعادة تشغيل
نفس النهج مع Simlink، من الناحية النظرية، ينطبق على الخدمات الأخرى.
إيجابيات الحل المقترح:
- المتغيرات المخزنة في / الخ / البيئة المتاحة تطبيقات متعددةوبعد يمكنك استدعاء صدى $ mysql_host في شل أو getenv ("mysql_host") في php.
- بيئات متغيرة غير محددة بوضوح في / الخ / البيئة، لن تقع في PHP-FPM. يتيح ذلك استخدام JOCTRATCOR مراقبة محيط النظام المعزول الذي تقوم فيه الخدمة التي تعمل فيها.
minuses:
- لسوء الحظ، PHP-FPM، لم أجد أمر عمل لإعادة التحميل عن طريق القياس مع nginx، لذلك في حالة التغيير / الخ / البيئة، يجب عليك القيام به systemCtl Daemon-Redustr && Service PHP-FPM إعادة تشغيل.
مهم: إذا كان التطبيق الخاص بك لا يعمل في بيئة معزولة (خادم، افتراضي، حاوية)، فإن تعريف متغيرات البيئة قد تؤثر بشكل غير متوقع على الخدمات المجاورة في النظام بسبب مصادفة الأسماء في المساحة العالمية.