لائحة الطعام
مجاني
تحقق في
الرئيسية  /  النصيحة / PHP متغيرات البيئة. كل ما تحتاج لمعرفته حول متغيرات البيئة في ترجمة PHP

متغيرات بيئة 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 بعد علامة الاستفهام. أذكر أنها متوفرة كلاهما عند إحضار طريقة وطريقة ما بعد (إذا تم تعريفها في الحالة الأخيرة عمل السمة. بطاقة شعار ).

path_info.

يتضمن معلومة اضافية حول الطريقة.

path_translated.

نفس المعلومات كما هو الحال في المتغير path_info. مع إعداد البادئة المسار إلى كتالوج الجذر لشجرة مستندات الويب.

نوع المحتوى.

نوع وسائل الإعلام من البيانات.

طول المحتوى.

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

gateway_interface.

نسخة CGI التي يستخدمها الخادم.

مثال على استخدام متغيرات البيئة

المتغيرات

في متغيرات RNR تبدأ مع علامة الدولار ( $ ). يمكن أن تتبع هذه الإشارة أي عدد من الأحرف الأبجدية الرقمية والأحرف تحت التشطيب، ولكن الحرف الأول لا يمكن أن يكون رقما أو تسطيرا. كما يجب تذكر أن أسماء المتغيرات في RNR حساسة للسجل، على عكس الكلمات الرئيسية.

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

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

المتغيرات الخارجية

بعد تحليل طلب العميل بواسطة خادم ويب نقله إلى جهاز RNR، يعرض الأخير عددا من المتغيرات التي تحتوي على بيانات تتعلق بالاستعلام وتتوفر في كل وقت يتم تنفيذها. أول rnr يأخذ بيئة متغيرة نظامك وإنشاء متغيرات بنفس الأسماء والقيم المحاطة البرمجي RNR من أجل السيناريوهات الموجودة على الخادم، ميزات نظام العميل التالية. يتم وضع هذه المتغيرات في مصفوفة متصلة $ http_env_vars. (يمكن العثور على المزيد حول الصفائف في الفصل 4).

بشكل طبيعي، صفيف متغير $ http_env_vars. تعتمد بشكل منهجي (لأنه في الواقع بيئة متغيرة). عرض قيم متغيرات البيئة لآذاعك، يمكنك استخدام الأمر ENV (UNIX) أو SET.

ثم يقوم RNR ثم بإنشاء مجموعة من المتغيرات التي يتم إنشاؤها عند تحليل سلسلة الاستعلام. يتم تخزين سلسلة الاستعلام في متغير $ query_string. ويمثل المعلومات بعد الرمز " ? "في عنوان URL المطلوب. RNR يكسر صف الاستعلام بواسطة الرموز & على ال عناصر منفصلةثم يبحث عن "\u003d" تسجيل الدخول في كل عنصر من هذه العناصر. إذا تم العثور على علامة "\u003d"، فسيتم إنشاء متغير باسم الاسم من رموز يسار علامة المساواة. النظر في النموذج التالي:

العمل \u003d. "http: //localhost/php/test.php" الطريقة \u003d " يحصل."\u003e HDD: اكتب \u003d " نص."الاسم \u003d" HDD."/>
cdrom: اكتب \u003d " نص."الاسم \u003d" cdrom."/>
اكتب \u003d " إرسال"/>

إذا كنت في هذا النموذج في خط الأقراص الصلبة، انقر فوق، على سبيل المثال، "Maxtor"، وفي سلسلة CDROM "NEC"، ثم سيقوم بإنشاء نموذج الطلب التالي:

http: //localhost/php/test.php؟ HDD \u003d ماكستور و Cdrom \u003d NEC

في حالتنا، سينشئ PNP المتغيرات التالية: $ hdd. \u003d "ماكستور" و $ cdrom. \u003d "NEC".

يمكنك العمل مع هذه المتغيرات من البرنامج النصي (من الولايات المتحدة - Test.php) كما هو الحال مع المتغيرات التقليدية. في حالتنا، يتم عرضها ببساطة:

صدى صوت.("

HDD هو $ HDD

"); صدى صوت.("

CDROM هو $ cdrom

"); ?>

إذا تم تنفيذ طلب الصفحة باستخدام طريقة النشر، فستظهر مجموعة من المتغيرات، والتي يتم تفسيرها أيضا ووضعها في صفيف. $ http_post_vars..

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

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.syt/php/pril/

http_cookie.

يتم تخزين جميع ملفات تعريف الارتباط في هذا المتغير في ترميز URL.

http_cookie \u003d hotlog \u003d 1؛ ZdedeBuggerResent \u003d PHP، PHTML، PHP3؛ ب \u003d ب؛ ppsessid \u003d.

http_user_agent.

يحدد متصفح المستخدم. لإنشاء نوع المتصفح الذي تحتاجه للتحقق من هذه السلسلة لوجود الكلمات: إذا كان المستعرض هو Internet Explorer، فسيتم تقديم الركيزة 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.syt.

http_from.

عنوان البريد الإلكتروني عن طريق إرسال طلب.

اسم الخادم.

اسم المجال أو عنوان IP خادم.

server_name \u003d www.syt.

Server_Software.

اسم وإصدار برنامج الخادم المطابق لطلب العميل.

Server_Port.

يحتوي هذا المتغير على منفذ الخادم الذي تناوله مستعرض المستخدم. عادة ما يكون هذا 80. يمكن أيضا استخدام المتغير لتوليد المعلمة رأس الموقع.

Server_Port \u003d 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 التي يستخدمها الخادم.

مثال على استخدام متغيرات البيئة

بيئة متغيرة

المتغيرات المحيطة:


"؛ $ 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.
يتعين على هذه التكرارات مزامنة بعضها البعض باستمرار. بالإضافة إلى ذلك، يقومون بتخزين منطق PHP معين داخل أنفسهم، مما يولد ازدواجية التعليمات البرمجية.

لذلك، يأخذ المشروع الآن في الاعتبار البيئة، ولكن ...

في حين أن التطوير قد أجريت على آلات العمل، فإن مشروع القراءة. ملف 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 إعادة تشغيل.

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