سؤال

أنا أحاول تصحيح ضخمة عتيقة (حوالي عام 2001) PHP خدمة ويب وأنا مواجهة فتح ملف الفشل.Fopen الدعوة في إدراج وحدة نمطية, المتصل هو تسجيل أن تعذر فتح الملف ولكن لا يوجد سبب يتم تسجيل.

الكود الذي في الواقع لا هو:

  // Read the file
  if (!($fp = @fopen($fileName, 'rb'))) {
    $errStr = "Failed to open '{$fileName}' for read.";
    break; // try-block
  }

كيف يمكنني معرفة السبب fopen فشلت ؟

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

المحلول

إجابات كبيرة بالفعل أعطيت ، عن @ المشغل, ولكن هنا بعض من المعلومات التي يمكن أن تكون مفيدة ، إما لك أو أي شخص آخر :

  • إذا لأغراض التصحيح, كنت في حاجة إلى تعطيل @ operator, يمكنك تثبيت تصرخ امتداد - انظر أيضا دليل -- والتي هي مفيدة حقا عندما كنت الحفاظ على نوع من التطبيق القديم ليست مصممة بشكل جيد / مشفرة ^^
  • اعتمادا على الخاص بك PHP configuation (إذا كان track_errors الخيار مفعل), قد تكون قادرا على استخدام $php_errormsg الحصول على رسالة الخطأ الأخير.

معتبرا هذا قطعة من التعليمات البرمجية :

// This file doesn't exist
if (!@fopen('/tmp/non-existant-file.txt', 'r')) {
    var_dump($php_errormsg);
}

// My Apache server doesn't have the right to read this file
if (!@fopen('/tmp/vboxdrv-Module.symvers', 'w')) {
    var_dump($php_errormsg);
}

سوف تحصل على هذا :

string 'fopen(/tmp/non-existant-file.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory' (length=129)

string 'fopen(/tmp/vboxdrv-Module.symvers) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied' (length=122)

لذا, ريال, مفيدة, ذات مغزى, رسائل خطأ ;-)

نصائح أخرى

ويسلب علامة @.

وعلامة @ يقمع رسائل الخطأ، لذلك هو supressing الخطأ ان وظيفة تعطي عادة.

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