2014-07-15 10 views
6

मैंपीएचपी: fopen त्रुटि से निपटने

$fp = fopen('uploads/Team/img/'.$team_id.'.png', "rb"); 
$str = stream_get_contents($fp); 
fclose($fp); 

और के साथ एक फ़ाइल लाने करना तो विधि यह छवि के रूप में वापस देता है। लेकिन जब fopen() विफल रहता है, क्योंकि फ़ाइल नहीं मौजूद है किया था, यह एक त्रुटि फेंकता है:

[{"message":"Warning: fopen(uploads\/Team\/img\/1.png): failed to open stream: No such file or directory in C:\... 

यह वापस json के रूप में आ रहा है, जाहिर है।

प्रश्न अब है: मैं त्रुटि कैसे पकड़ सकता हूं और विधि को इस त्रुटि को सीधे क्लाइंट पर फेंकने से रोक सकता हूं?

+0

मैं की तरह कुछ करने की कोशिश की इस 'अगर ($ fp = fopen ('अपलोड/टीम/img /'.$ team_id।'। Png ',' rb")) {इस-> createNotFoundException फेंक ('नहीं आईडी '$ team_id) के लिए मिली छवि; } ' लेकिन यह काम नहीं किया। – humpdi

+0

मैंने पकड़ने की कोशिश की कोशिश की, लेकिन काम नहीं किया। त्रुटि क्लाइंट को पठनीय थी। – humpdi

+0

'कोशिश करें {$ fp = fopen (' अपलोड/टीम/img /'.$ team_id। '। Png', "rb"); } पकड़ो (अपवाद $ ई) {इसे $ फेंक दें-> createNotFoundException ('आईडी के लिए कोई छवि नहीं मिली'। $ team_id); } ' – humpdi

उत्तर

23

आपको पहले file_exists() द्वारा फ़ाइल के अस्तित्व का परीक्षण करना चाहिए। अपवाद के बिना

try 
    { 
     $fileName = 'uploads/Team/img/'.$team_id.'.png'; 

     if (!file_exists($fileName)) { 
     throw new Exception('File not found.'); 
     } 

     $fp = fopen($fileName, "rb"); 
     if (!$fp) { 
     throw new Exception('File open failed.'); 
     } 
     $str = stream_get_contents($fp); 
     fclose($fp); 

     // send success JSON 

    } catch (Exception $e) { 
     // send error message if you can 
    } 

या सरल उपाय:

$fileName = 'uploads/Team/img/'.$team_id.'.png'; 
    if (file_exists($fileName) && ($fp = fopen($fileName, "rb"))!==false) { 

     $str = stream_get_contents($fp); 
     fclose($fp); 

     // send success JSON  
    } 
    else 
    { 
     // send error message if you can 
    } 
+0

बहुत दोस्त धन्यवाद, यह बात है! :) – humpdi

0
[{"message":"Warning: fopen(uploads\/Team\/img\/1.png): failed to open stream: No such file or directory in C:\... 

त्रुटि स्पष्ट है: आपने गलत निर्देशिका डाली है, आप कोशिश कर सकते हैं कि आप क्या चाहते हैं लेकिन यह काम नहीं करेगा। आप इसे इस के साथ काम कर सकते हैं:

  1. अपनी फ़ाइल लेने के लिए और अपने php फ़ाइल का एक ही फ़ोल्डर में रख दें (यदि आप के बाद इसे स्थानांतरित करने में चिंता मत करो में सक्षम हो जाएगा यह अपने त्रुटि के बारे में है) या किसी फ़ोल्डर अपनी स्क्रिप्ट का "उच्च"
  2. परिवर्तन (सिर्फ अपने www फ़ोल्डर के बाहर नहीं) पर ('./$team_id.'png',"rb");
  3. अपनी स्क्रिप्ट फ़ाइल को फिर से चलाएं करने के लिए fopen

इस भूल नहीं है: आप कर सकते हैं ' एक ऐसी फ़ाइल तक नहीं पहुंचें जो आपके "डब्ल्यू में नहीं है ww "फ़ोल्डर (उसे आपकी फ़ाइल नहीं मिली क्योंकि वह आपको उसका नाम देता है: नाम $ team_id चर से आता है)

1

आप fopen() कॉल करने से पहले file_exists() फ़ंक्शन का उपयोग कर सकते हैं।

if(file_exists('uploads/Team/img/'.$team_id.'.png') 
{ 
    $fp = fopen('uploads/Team/img/'.$team_id.'.png', "rb"); 
    $str = stream_get_contents($fp); 
    fclose($fp); 
} 
संबंधित मुद्दे