بما في ذلك الملفات الحساسة لحالة الأحرف على نظام التشغيل Windows من PHP

StackOverflow https://stackoverflow.com/questions/63599

  •  09-06-2019
  •  | 
  •  

سؤال

لدينا مشكلة في استخدام PEAR المكتبات على Windows من PHP.

يحتوي Pear على العديد من الفئات، ونحن نستفيد من عدد قليل منها، أحدها هو فئة Mail الموجودة في Mail.php.نستخدم PEAR على المسار، بدلاً من توفير المسار الكامل والصريح لملفات PEAR الفردية:

require_once('Mail.php');

بدلا من:

require_once('/path/to/pear/Mail.php');

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

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

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

(نحن ندعم Apache وMicrosoft IIS وLightHTTPD وZeus، باستخدام PHP 4.3 أو الأحدث (بما في ذلك PHP5))

هل كانت مفيدة؟

المحلول

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

<?php
  $path_to_pear = '/usr/share/php/pear';
  set_include_path( $path_to_pear . PATH_SEPARATOR . get_include_path() );
?>

نصائح أخرى

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

يمكنك محاولة تغيير التضمين الخاص بك من include('Mail.php'); ل include('./Mail.php');, ، لكنني لست متأكدًا مما إذا كان هذا سيعمل على صندوق Windows (عدم وجود صندوق به PHP للاختبار عليه).

إذا كنت تستخدم PHP 4، فيمكنك الاستفادة منها هذا حشرة.وطبعا هذا حل فوضوي..

أو يمكنك فقط إعادة تسمية ملف mail.php الخاص بك إلى شيء آخر...

أنا متأكد تمامًا من أن سبب هذه المشكلة هو رمز NTFS الموجود في نظام Win32 الفرعي.إذا كنت تستخدم نظام الملفات القابل للتثبيت Ext2 (IFS)، فيجب أن تحصل على حساسية لحالة الأحرف على محرك الأقراص هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top