قائمة طعام
مجاني
التسجيل
الصفحة الرئيسية  /  البرامج الثابتة/ التحقق من وجود متغير php. التحقق من وجود متغير

تحقق من وجود متغير php. التحقق من وجود متغير

المواد مخصصة أساسًا لمبرمجي الويب المبتدئين.

مقدمة.

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

سأحاول هنا أن أصف بأكبر قدر ممكن من التفاصيل الأخطاء الشائعة عند تصفية البيانات بتنسيق نص PHPوتعطي نصائح بسيطةكيفية تصفية البيانات بشكل صحيح.

هناك العديد من المقالات على الإنترنت حول تصفية البيانات ، لكنها ليست كاملة وبدون أمثلة مفصلة.

استخلاص المعلومات.

الترشيح. خطأ # 1
بالنسبة للمتغيرات الرقمية ، يتم استخدام الاختيار التالي:
$ number = $ _GET ["input_number"] ؛ إذا (intval ($ number)) (... تنفيذ استعلام SQL ...)
لماذا سيؤدي الى حقن SQL؟ النقطة هي أن المستخدم يمكن أن يحدد في المتغير المدخلاتالمعنى:
1 "+ UNION + SELECT
في هذه الحالة ، سيتم تمرير الشيك بنجاح. تحصل الدالة intval على قيمة العدد الصحيح للمتغير ، أي 1 ، ولكن في المتغير نفسه رقم $لم يتغير شيء ، وبالتالي فإن الكل كود خبيثإلى استعلام SQL.
التصفية الصحيحة:
$ number = intval ($ _ GET ["input_number"]) ؛ إذا (number $) (... تنفيذ استعلام SQL ...)
بالطبع ، يمكن أن تتغير الحالة ، على سبيل المثال إذا كنت تحتاج فقط إلى الحصول على نطاق معين:
إذا كان (رقم $> = 32 AND $ number<= 65)

إذا كنت تستخدم مربعات الاختيار أو التحديدات المتعددة ذات القيم الرقمية ، فحدد هذا:
$ checkbox_arr = array_map ("intval"، $ _POST ["checkbox"])؛
خريطة_مصفوفة
ألتقي أيضًا بالترشيح في النموذج:
$ number = htmlspecialchars (intval ($ _ GET ["input_number"])) ؛
أتش تي أم أل خاصة
أو:
$ number = mysql_escape_string (intval ($ _ GET ["input_number"])) ؛
mysql_escape_string

لا يمكن أن يسبب سوى الابتسامة :)

الترشيح. خطأ # 2.
بالنسبة لمتغيرات السلسلة ، يتم استخدام التصفية التالية:
$ input_text = addlashes ($ _ GET ["input_text"])؛
وظيفة الرموش الإضافية تهرب من العروض الخاصة. أحرف ، لكنها لا تأخذ في الاعتبار يمكن تجاوز ترميز قاعدة البيانات والتصفية. لن أنسخ نص المؤلف الذي وصف هذه الثغرة الأمنية وأعطي فقط رابطًا إلى كريس شيفليت (يمكنك البحث عن الترجمة على الإنترنت الروسي).

استخدم دالة mysql_escape_string أو mysql_real_escape_string ، على سبيل المثال:
$ input_text = mysql_escape_string ($ _ GET ["input_text"]) ؛
إذا كنت لا تنوي الدخول علامات html، فمن الأفضل إجراء التصفية التالية:
$ input_text = strip_tags ($ _ GET ["input_text"]) ؛ $ input_text = htmlspecialchars ($ input_text) ؛ input_text = mysql_escape_string ($ input_text) ؛
strip_tags - علامات html الشريط.
htmlspecialchars - تحويل خاص. الأحرف في كيان HTML.
سيحمي ذلك نفسك من هجمات XSS بخلاف حقن SQL.
إذا كنت بحاجة إلى علامات html ، ولكن فقط لعرض الكود المصدري ، فهذا يكفي لاستخدام:
$ input_text = htmlspecialchars ($ _ GET ["input_text"])؛ input_text = mysql_escape_string ($ input_text) ؛

إذا كان من المهم بالنسبة لك ألا تكون قيمة المتغير فارغة ، فاستخدم وظيفة القطع ، على سبيل المثال:
$ input_text = trim ($ _ GET ["input_text"]) ؛ $ input_text = htmlspecialchars ($ input_text) ؛ input_text = mysql_escape_string ($ input_text) ؛

الترشيح. الخطأ رقم 3.
يتعلق الأمر بالبحث في قاعدة البيانات.
للبحث بالأرقام ، استخدم التصفية الموضحة في الخطأ الأول.
للبحث عن طريق النص ، استخدم التصفية الموضحة في الخطأ الثاني ، ولكن مع التنبيهات.
لكي لا يتمكن المستخدم من تنفيذ خطأ منطقي ، من الضروري حذف أو فحص الخاص. رموز SQL.
مثال بدون إضافة. معالجة الخط:
$ input_text = htmlspecialchars ($ _ GET ["input_text"])؛ // بحث: "٪" $ input_text = mysql_escape_string ($ input_text) ؛
عند الإخراج نحصل على طلب النموذج:
... حيث text_row مثل "٪". $ Input_text. "٪" ... // WHERE text_row LIKE "٪٪٪"
سيؤدي ذلك إلى زيادة الحمل على القاعدة بشكل كبير.
في البرنامج النصي الخاص بي ، أستخدم وظيفة تزيل الأحرف غير المرغوب فيها من البحث:
الوظيفة strip_data ($ text) (علامات الاقتباس $ = المصفوفة ("\ x27"، "\ x22"، "\ x60"، "\ t"، "\ n"، "\ r"، "*"، "٪"، "<", ">"،"؟ "،"! ")؛ $ good quotes = array (" - "،" + "،" # ")؛ $ repquotes = array (" \ - "،" \ + "،" \ # ")؛ $ text = trim (strip_tags ($ text))؛ $ text = str_replace ($ quotes، ""، $ text)؛ $ text = str_replace ($ goodquotes، $ repquotes، $ text)؛ $ text = ereg_replace ("+" ، ""، $ text)؛ ارجع $ text؛)
بالطبع ، ليست كل الرموز المذكورة أعلاه خطيرة ، لكن في حالتي ليست هناك حاجة إليها ، لذلك أقوم بإجراء بحث واستبدال.
مثال على استخدام التصفية:
$ input_text = strip_data ($ _ GET ["input_text"]) ؛ $ input_text = htmlspecialchars ($ input_text) ؛ input_text = mysql_escape_string ($ input_text) ؛
كما أنصحك بتحديد عدد الأحرف في البحث بما لا يقل عن 3 أحرف على الأقل لأن إذا كان لديك عدد كبير من السجلات في قاعدة البيانات ، فإن البحث الذي يتكون من حرفين إلى حرفين سيزيد بشكل كبير من الحمل على قاعدة البيانات.
الترشيح. خطأ # 4.
لا يتم تصفية القيم الموجودة في المتغير _ ملف تعريف الارتباط $... يعتقد بعض الناس أنه نظرًا لأنه لا يمكن تمرير هذا المتغير من خلال النموذج ، فهذا ضمان للأمان.
من السهل جدًا محاكاة هذا المتغير بواسطة أي متصفح عن طريق تحرير ملفات تعريف الارتباط الخاصة بالموقع.
على سبيل المثال ، في أحد أنظمة إدارة المحتوى المعروفة ، كان هناك فحص لقالب الموقع المستخدم:
if (is_dir (MAIN_DIR. "/ template /". $ _COOKIE ["skin"])) ($ config ["skin"] = $ _COOKIE ["skin"] ؛) $ tpl-> dir = MAIN_DIR. "/ نموذج /". $ config ["الجلد"]؛
في هذه الحالة ، يمكنك استبدال قيمة المتغير $ _COOKIE ["الجلد"]وتسبب في حدوث خطأ ، ونتيجة لذلك سترى المسار المطلق لمجلد الموقع.
إذا كنت تستخدم قيمة ملفات تعريف الارتباط للحفظ في قاعدة البيانات ، ثم استخدم أحد عوامل التصفية الموضحة أعلاه ، وهذا ينطبق أيضًا على المتغير _SERVER دولار.
الترشيح. خطأ # 5.
التوجيه المتضمن Register_globals... تأكد من إيقاف تشغيله إذا كان قيد التشغيل.
في بعض الحالات ، يمكنك تمرير قيمة متغير لا يجب تمريره ، على سبيل المثال ، إذا كانت هناك مجموعات على الموقع ، فيجب أن يكون المتغير $ group فارغًا أو يساوي 0 للمجموعة 2 ، لكنه يكفي لتزييف النموذج عن طريق إضافة الكود:

في سكربت PHP ، المتغير المجموعة $ستكون مساوية لـ 5 إذا لم يتم التصريح عنها بقيمة افتراضية في البرنامج النصي.
الترشيح. خطأ # 6.
تحقق من التنزيلات الخاصة بك.
تحقق من النقاط التالية:
  1. امتداد الملف. من المستحسن منع تنزيل الملفات ذات الامتدادات: php ، و php3 ، و php4 ، و php5 ، إلخ.
  2. هو الملف الذي تم تحميله على الخادم move_uploaded_file
  3. حجم الملف
فحص. خطأ # 1.
لقد صادفت حالات تم فيها تمرير اسم المستخدم أو معرفه (الذي تمت زيادة السمعة إليه) لطلب AJAX (على سبيل المثال: زيادة السمعة) ، ولكن في PHP نفسها لم يكن هناك تحقق من وجود مثل هذا المستخدم.
على سبيل المثال:
$ user_id = intval ($ _ REQUEST ["user_id"]) ؛ ... INSERT INTO REPLOG SET uid = "($ user_id)" ، بالإضافة إلى = "1" ... ... تحديث المستخدمين SET السمعة = السمعة + 1 WHERE user_id = "($ user_id)" ...
اتضح أننا نقوم بإنشاء سجل في قاعدة البيانات ، وهو أمر غير مفيد لنا تمامًا.
فحص. خطأ # 2.
عند تنفيذ أنواع مختلفة من الإجراءات (إضافة ، تحرير ، حذف) مع البيانات ، لا تنس التحقق من حقوق المستخدم للوصول إلى هذه الوظيفة و ميزات إضافية(باستخدام علامات html أو القدرة على نشر المواد دون التحقق).

لفترة طويلة أصلحت خطأً مشابهًا في وحدة واحدة من المنتدى ، عندما كان بإمكان أي مستخدم تعديل رسالة الإدارة.

فحص. الخطأ رقم 3.
عند استخدام ملفات ملفات phpقم بفحص بسيط.
في ملف index.php(أو في أي ملف رئيسي آخر) اكتب هذا السطر قبل تضمين ملفات php الأخرى:
تعريف ("READFILE" ، صحيح) ؛
اكتب في بداية ملفات php الأخرى:
if (! المعرفة ("READFILE")) (الخروج ("خطأ ، طريقة خاطئة للملف.
انتقل إلى main."); }
سيؤدي هذا إلى تقييد الوصول إلى الملفات.
فحص. خطأ # 4.
استخدم التجزئة للمستخدمين. سيساعد هذا في منع XSS من استدعاء وظيفة معينة.
مثال على إنشاء تجزئة للمستخدمين:
$ secret_key = md5 (strtolower ("http://site.ru/". $ member ["name"]. sha1 ($ password). date ("Ymd"))) ؛ // $ secret_key هو التجزئة لدينا
بعد ذلك ، في جميع الأشكال المهمة ، استبدل أحد المدخلات بقيمة التجزئة الحالية للمستخدم:

أثناء تنفيذ البرنامج النصي ، تحقق مما يلي:
إذا ($ _POST ["secret_key"]! == $ secret_key) (خروج ("خطأ: secret_key!") ؛)
فحص. خطأ # 5.
عند عرض أخطاء SQL ، قم بفرض قيود بسيطة على الوصول إلى المعلومات. على سبيل المثال ، قم بتعيين كلمة مرور لمتغير GET:
إذا ($ _GET ["passsql"] == "password") (... إخراج خطأ SQL ...) وإلا (... معلومات خطأ فقط ، بدون تفاصيل ...)
سيؤدي هذا إلى إخفاء المعلومات عن المخترق التي يمكن أن تساعده في اختراق الموقع.
فحص. خطأ # 5.
حاول عدم تضمين الملفات عن طريق الحصول على أسماء الملفات خارجيًا.
على سبيل المثال:
if (isset ($ _ GET ["file_name"])) (تشمل $ ​​_GET ["file_name"]. ". php" ؛)
استخدم المفتاح

أريد التحقق من وجود متغير. الآن أفعل شيئًا كهذا:

جرب: myVar باستثناء NameError: # افعل شيئًا.

هل هناك طرق أخرى بدون استثناءات؟


2018-05-09 13:10

الإجابات:

للتحقق من وجود متغير محلي:

إذا كان "myVar" باللغة المحلية (): يوجد # myVar.

للتحقق من وجود متغير عام:

إذا كان "myVar" في globals (): يوجد # myVar.

للتحقق مما إذا كان الكائن له سمة:

إذا كان hasattr (obj، "attr_name"): # obj.attr_name موجود.


2018-05-09 13:16

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

ستضمن الحيلة التالية ، التي تشبه خدمتك ، أن المتغير لديه بعضالقيمة قبل الاستخدام:

جرب: myVar باستثناء NameError: myVar = None # الآن أنت حر في استخدام myVar دون شكوى Python.

ومع ذلك ، ما زلت لا أعتقد أن هذه فكرة جيدة - في رأيي ، يجب إعادة صياغة الكود الخاص بك لتجنب هذا الموقف.


2018-05-09 13:19

باستخدام المحاولة / باستثناء - أفضل طريقةتحقق من وجود متغير. ولكن من شبه المؤكد أن هناك طريقة أفضل للقيام بما تفعله من إعداد / اختبار الكرة الأرضية.

على سبيل المثال ، إذا كنت تريد تهيئة متغير على مستوى الوحدة النمطية في المرة الأولى التي تستدعي فيها بعض الوظائف ، فمن الأفضل أن تفعل شيئًا كهذا باستخدام الكود:

My_variable = لا شيء def InitMyVariable (): my_variable العمومي إذا كان my_variable لا شيء: my_variable = ...


2018-05-09 13:27

للأشياء / الوحدات ، يمكنك أيضًا

"var" في dir (obj)

على سبيل المثال،

>>> فئة شيء (كائن): ... تمرير ... >>> ج = شيء ما () >>> ca = 1 >>> "a" في dir (c) صحيح >>> "b" في dir (ج) خطأ


2017-10-28 18:39

الطريقة السهلة هي تهيئته أولاً myVar = لا شيء

ثم في وقت لاحق:

إذا لم يكن myVar بلا: # افعل شيئًا


2018-06-04 18:46

أعتقد أن الاختبار سيُستخدم في وظيفة مشابهة لإجابة user97370. لا أحب هذه الإجابة لأنها تلوث مساحة الاسم العالمية. تتمثل إحدى طرق إصلاح ذلك في استخدام فئة بدلاً من ذلك:

Class InitMyVariable (كائن): my_variable = None def __call __ (self): if self.my_variable is None: self.my_variable = ...

لا يعجبني هذا لأنه يعقد الكود ويفتح أسئلة مثل ما إذا كان هذا يؤكد نمط برمجة Singleton؟ لحسن الحظ ، سمحت Python بأن يكون للوظائف سمات لفترة من الوقت ، مما يعطينا هذا الحل البسيط:

Def InitMyVariable (): إذا كانت InitMyVariable.my_variable لا شيء: InitMyVariable.my_variable = ... InitMyVariable.my_variable = لا شيء


2018-03-25 20:31

2018-05-09 13:12

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

وظيفة فارغة (11)

لدي (أو لا) متغير $ _GET ["myvar"] قادم من سلسلة الاستعلام الخاصة بي وأريد التحقق مما إذا كان هذا المتغير موجودًا وأيضًا ما إذا كانت القيمة تتطابق مع شيء ما داخل عبارة if الخاصة بي:

ما أفعله وأعتقد أنه ليس أفضل طريقة للقيام به:

if (isset ($ _ GET ["myvar"]) && $ _GET ["myvar"] == "something"): افعل شيئًا

هذه حالة بسيطة ، لكن تخيل أنك تريد مقارنة العديد من متغيرات $ myvar.

الإجابات

هذا مشابه للإجابة المقبولة ، لكنه يستخدم in_array بدلاً من ذلك. أفضل استخدام () فارغ في هذه الحالة. أقترح أيضًا استخدام تصريح مصفوفة السلسلة الجديد المتوفر في PHP 5.4.0+.

$ المسموح به = ["شيء" ، "لا شيء"] ؛ if (! blank ($ _ GET ["myvar"]) && in_array ($ _ GET ["myvar"]، $ allowed)) (..)

هذه وظيفة لاختبار قيم متعددة في وقت واحد.

arrKeys $ = array_keys ($ _ GET) ؛ $ المسموح به = ["شيء" ، "لا شيء"] ؛ دالة checkGet ($ arrKeys، $ allow) (foreach ($ arrKeys مثل $ key) (if (in_array ($ _ GET [$ key]، $ allowed)) (قيم $ [$ key]؛)) تُرجع قيم $ ؛)

أنا استخدم كل ما عندي وظيفة مفيدة exst () ،التي تعلن عن المتغيرات تلقائيًا.

$ element1 = exst ($ arr ["key1"]) ؛ $ val2 = exst ($ _ POST ["key2"]، "novalue")؛ / ** * Function exst () - للتحقق مما إذا كان المتغير قد تم تعيينه * (نسخه / الصقه في أي مكان من الكود الخاص بك) * * إذا تم تعيين المتغير ولم يكن فارغًا ، يتم إرجاع المتغير (بدون تحويل) * إذا كان المتغير لم يتم تعيينها أو فارغة ، يتم إرجاع القيمة الافتراضية $ * *param مختلطة $ var *param مختلطة $ افتراضي * *return مختلطة * / function exst (& $ var، $ افتراضي = "") ($ t = "" ؛ if (! isset ($ var) ||! $ var) (if (isset ($ default) && $ default! = "") $ t = $ افتراضي ؛) else ($ t = $ var ؛) if (is_string ($ t)) $ t = تقليم ($ t) ؛ إرجاع $ t ؛)

حسنًا ، يمكنك الحصول على ما إذا كان ($ _ GET ["myvar"] == "شيء ما") فقط لأن هذا الشرط يفترض أن المتغير موجود أيضًا. إذا لم يكن كذلك ، فسيتم تقييم التعبير أيضًا على خطأ.

أعتقد أنه لا بأس من القيام بذلك بشرط كما هو مذكور أعلاه. لا ضرر في الواقع.

سؤالي هو ، هل هناك طريقة للقيام بذلك دون التصريح عن المتغير مرتين؟

لا ، لا توجد طريقة للقيام بذلك بشكل صحيح دون إجراء فحصين. انا اكره ذلك ايضا

تتمثل إحدى طرق التغلب على ذلك في استيراد جميع متغيرات GET ذات الصلة عند نقطة مركزية واحدة إلى مصفوفة أو كائن من نوع معين (يقوم معظم MVC بذلك تلقائيًا) وتعيين أي خصائص مطلوبة لاحقًا. (بدلاً من الوصول إلى متغيرات الطلب من خلال الكود.)

If (isset ($ _ GET ["myvar"]) == "شيء")

بفضل Mellowsoon و Pekka ، أجريت بعض الأبحاث هنا وتوصلت إلى هذا:

  • تحقق من كل متغير وأعلن أنه لاغٍ (إذا كان الأمر كذلك) قبل استخدامه (على النحو الموصى به):
! isset ($ _ GET ["myvar"])؟ $ _GET ["myvar"] = 0: 0 ؛

* حسنًا ، هذا بسيط ولكنه يعمل بشكل رائع ، يمكنك البدء في استخدام المتغير في كل مكان بعد هذا السطر

  • استخدام مصفوفة لجميع الحالات:
$ myvars = مجموعة ("var1"، "var2"، "var3")؛ foreach ($ myvars as $ key)! isset ($ _ GET [$ key])؟ $ _GET [$ key] = 0: 0 ؛

* بعد ذلك يمكنك استخدام المتغيرات الخاصة بك (var1 ، var2 ، var3 ... إلخ) ،

ملاحظة: يجب أن تكون الوظيفة التي تحصل على كائن JSON أفضل (أو سلسلة محددة بسيطة من أجل bang / bang) ؛

يتم تقدير الأساليب الأفضل :)

تحديث:

استخدم $ _REQUEST بدلاً من $ _GET ، وبهذه الطريقة يمكنك تغطية المتغيرين $ _GET و $ _POST.

Isset ($ _ REQUEST [$ key])؟ $ _REQUEST [$ key] = 0: 0 ؛

الحل الذي وجدته من اللعبة هو القيام بذلك:

If ($ x = & $ _ GET ["myvar"] == "something") (// افعل أشياء باستخدام $ x)

كتلميح ، قد تفكر في هذا النهج:

Required = array ("myvar" => "defaultValue1"، "foo" => "value2"، "bar" => "value3"، "baz" => "value4")؛ $ مفقود = array_diff (مطلوب $ ، array_keys ($ _ GET)) ؛ foreach ($ مفقود كـ $ key => $ افتراضي) ($ _GET [$ key] = $ افتراضي ؛)

قمت بتعيين الإعدادات الافتراضية وتعيين المعلمات غير المستلمة على الافتراضي :)

لسوء الحظ ، هذه هي الطريقة الوحيدة للقيام بذلك. ولكن هناك طرق للعمل مع المصفوفات الكبيرة. على سبيل المثال ، شيء من هذا القبيل:

$ required = array ("myvar"، "foo"، "bar"، "baz")؛ $ مفقود = array_diff (مطلوب $ ، array_keys ($ _ GET)) ؛

يحتوي المتغير $ المفقود الآن على قائمة بالقيم المطلوبة ولكنها مفقودة من المصفوفة $ _GET. يمكنك استخدام مصفوفة $ مفقود لعرض الرسالة للزائر.

أو يمكنك استخدام شيء مثل هذا:

$ required = array ("myvar"، "foo"، "bar"، "baz")؛ $ مفقود = array_diff (مطلوب $ ، array_keys ($ _ GET)) ؛ foreach ($ مفقود كـ $ m) ($ _GET [$ m] = فارغ ؛)

الآن كل عنصر مطلوب له قيمة افتراضية. الآن يمكنك استخدام if ($ _ GET ["myvar"] == "something") دون القلق بشأن عدم ضبط المفتاح.

ينعش

هناك طريقة أخرى لتنظيف الكود وهي استخدام وظيفة تتحقق مما إذا كان قد تم تعيين قيمة.

الوظيفة getValue ($ key) (if (! Isset ($ _ GET [$ key])) (إرجاع false؛) إرجاع $ _GET [$ key]؛) if (getValue ("myvar") == "شيء") ( / / افعل شيئا)

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

الوظيفة _FX (اسم $) (إذا كانت (isset ($$ name)) تُرجع $$ name ؛ وإلا تُرجع فارغة ؛)

ثم تفعل _FX ("param") == "123" ، مجرد فكرة

وجدت (كثيرا) كود أفضلللقيام بذلك إذا كنت تريد التحقق من أي شيء.

إذا [[$ 1 = ""]] ثم صدى "$ 1 فارغ" أو صدى "$ 1 ممتلئ" fi

لماذا كل هذا؟ كل شيء موجود في Bash ، لكنه فارغ افتراضيًا ، لذا لا يمكن أن يساعدك اختبار z و test -n.

إذا كان [$ (# 1) = 0] ثم صدى "$ 1 فارغ" أو صدى "$ 1 ممتلئ" fi

يمكنك التحقق من وجود متغير معين (أي أنه قد تم تهيئته أو أنه قد تم تهيئته). للقيام بذلك ، استخدم الوظيفة:

Isset (متغير) ؛

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

× دولار = 5 ؛

إذا (الإصدار ($ x))

صدى صوت ‘< BR > المتغير $ x موجود ، "،" قيمته $ x < BR >”;

ستعرض الشاشة:

متغير $ x موجود ، قيمته 5

من المهم أن تتذكر أنه لا يمكننا استخدام متغير غير مهيأ في البرنامج - سيؤدي ذلك إلى إصدار تحذير من المترجم الفوري بي أتش بي .

لمعرفة ما إذا كانت القيمة متغيرًا فارغة ، يتم استخدام الوظيفة:

فارغة ( عامل)؛

إذا كانت قيمة المتغير صفر ,“0”, باطل , سطر فارغ (“” ) ، خطأ ، المتغير غير مصرح به أو هو مجموعة فارغة ثم تعود هذه الوظيفة حقيقية ، خلاف ذلك - خاطئة .

للتأكد نوع من متغير ، يتم استخدام الوظائف:

Is_string (متغير) ؛

يكون _ int (عامل)؛

يكون _ تطفو (عامل)؛

يكون _ باطل (عامل)؛

يكون _ مجموعة مصفوفة (عامل)؛

يكون _ رقمي (عامل)؛ - إذا كان المتغير رقمي ( عدد صحيح , تطفو ) أو سلسلة تحتوي على أرقام فقط.

تعود هذه الوظائف حقيقية إذا كان المتغير من النوع المحدد.

إخراج البيانات

إخراج بدون تنسيق

فورماتليس يتم إخراج السلاسل أو قيم المتغيرات بواسطة الوظيفة:

صدى صوت قائمة المتغيرات

صدى صوت خط؛

أين قائمة متغيرة - أسماء متغيرات الإخراج مفصولة بفواصل.

إذا كنا نعمل باستخدام مستعرض ويب ، فإن هذه الوظيفة توجه الإخراج إلى جانب العميل من المتصفح (إلى نافذته).

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

سنة = 2012 ؛

رسالة $ = " يتمنى للجميع سعادة !”;

صدى صوت "

لي تهانينا !

”;

صدى صوت " جاء سنة $ عام !
رسالة $
”;

?>

سيتم عرض عنوان المستوى. ح 3 وتحية لاحقة مع كلمة " سعادة!" ستتم طباعته بخط مائل غامق:

تهاني!

لقد حان عام 2012! أتمنى للجميع سعادة!

هذه هي الطريقة التي تنشئ بها مواقع ديناميكية.

إخراج منسق

منسق يتيح لك الإخراج تمثيل الأرقام الناتجة في أنظمة الأرقام المختلفة ، وفي النظام العشري - في أشكال مختلفة ( التنسيقات ). إنه مشابه للإخراج المنسق بتنسيق سي ويتم تنفيذه بواسطة الوظائف:

printf ("تنسيق" ، قائمة الإخراج) ؛

سبرينتف ("تنسيق" ، قائمة الإخراج) ؛

تقوم الوظيفة الأولى بإخراج البيانات المنسقة إلى نافذة المتصفح وإرجاع مقدارها.

تقوم الوظيفة الثانية بتنسيق بيانات الإخراج فقط ، ولكنها لا تقوم بإخراجها.

صيغة هي سلسلة من واصفات التحويل لقيم المخرجات.

واصف التحويل لكل قيمة شكل:

% عنصر نائب نوع دقة محاذاة الطول

- إجمالي هو الحرف الذي سيتم استخدامه لإكمال نتيجة التحويل إلى المحدد الطول (إفتراضي - فضاء ) ؛ إذا كان حرفًا آخر ، يسبقه اقتباس واحد ( الفاصلة العليا ),

- انتقام - افتراضيا - بواسطة حق حافة مجال الإخراج ؛ إذا كان هناك ناقص ( - ) ، ثم بواسطة اليسار ,

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

- صحة - عدد المنازل العشرية في الجزء الكسري من الرقم ،

- نوع من - نوع قيمة الإخراج:

ب الثنائية ,

مع رمز ,

د كامل بالتدوين العشري ،

ه مواد في شكل أسي (نقطة عائمة) ،

F مواد في شكل نقطة ثابتة ،

س خط ,

ا كامل في نظام الأرقام الثماني ،

x كامل بالتدوين الست عشري.

مثال:

بي أتش بي

$ زارب _1 = 6543.21;

$ زارب _2 = 45321.67;

$ مألوف _1 = "بالاجانوف" ؛

$ مألوف _2 = "بندر" ؛

printf ("< ح 1> كشوف المرتبات ح 1>");

printf ("٪" .- 12s٪ ". 10.2f rub."، $ fam_1، $ zarp_1)؛

صدى صوت "
";

printf ("٪" .- 12s٪ ". 10.2f rub."، $ fam_2، $ zarp_2)؛

صدى صوت "
";

?>

تم اختيار النقطة كعنصر نائب ( ‘. ). تتم محاذاة الألقاب ( - ) في مجال العرض 12 الشخصيات. يتم تمثيل الأرقام في شكل نقطة ثابتة في حقل واسع 10 الشخصيات وبدقة 2 المنازل العشرية ، ما يبررها.