2009-07-30 16 views
9

मैं एक विशाल, पुरातन (लगभग 2001) PHP वेब सेवा डीबग करने की कोशिश कर रहा हूं और मुझे फ़ाइल खुली असफलताओं का सामना करना पड़ रहा है। फॉपेन कॉल एक मॉड्यूल में है, कॉलर लॉगिंग कर रहा है कि फ़ाइल खोला नहीं जा सका लेकिन कोई कारण लॉग नहीं किया जा रहा है।एक PHP फ़ाइल खुली विफलता के कारण को आउटपुट कैसे करें

कोड है कि वास्तव में खुला करता है:

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

मैं कैसे क्यों fopen में विफल रहा है पता कर सकते हैं?

उत्तर

1

महान जवाब पहले से ही दिया गया है @ operator के बारे में है, लेकिन यहाँ और अधिक जानकारियां कि उपयोगी हो सकता है की एक जोड़ी, या तो आप या किसी और को:

  • हैं, डीबगिंग उद्देश्यों के लिए है, तो आप अक्षम जरूरत @ operator, आप स्थापित कर सकते हैं scream extension- यह भी देखना the manual - जो वास्तव में उपयोगी है जब आप अच्छी तरह से डिजाइन नहीं पुराने आवेदन के कुछ प्रकार को बनाए रखने रहे हैं/कोडित ^^
  • अपने PHP configuation पर निर्भर करता है (यदि track_errors विकल्प सक्रिय है), आप अंतिम त्रुटि संदेश प्राप्त करने के लिए $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) 
    

    तो, असली, उपयोगी, सार्थक, त्रुटि संदेश ;-)

    :

    // This file doesn't exist 
    if ([email protected]('/tmp/non-existant-file.txt', 'r')) { 
        var_dump($php_errormsg); 
    } 
    
    // My Apache server doesn't have the right to read this file 
    if ([email protected]('/tmp/vboxdrv-Module.symvers', 'w')) { 
        var_dump($php_errormsg); 
    } 
    

    आप इस मिलेगा:

कोड के इस टुकड़े को ध्यान में रखते

9

@ साइन लें।

@ साइन त्रुटि संदेशों को दबाता है, इसलिए यह सामान्य रूप से फ़ंक्शन को दी जाने वाली त्रुटि को दबा रहा है।