2012-12-11 17 views
5

के साथ PHP कर्ल/एफ़टीपी के साथ प्रेषित किया जा रहा है, मुझे हाल ही में एक समस्या का सामना करना पड़ा है, जहां मेरे आवेदन के लिए उच्च ट्रैफ़िक की अवधि के दौरान, छोटे सीएसवी फाइलों को कर्ल/एफ़टीपी के साथ शून्य बाइट्स के साथ भेजा जा रहा है। हालांकि, जब मैं अपने फाइल सिस्टम पर फ़ाइल देखता हूं तो मैं देख सकता हूं कि यह निश्चित रूप से खाली नहीं है और आकार में शून्य बाइट नहीं है।फ़ाइलों को शून्य बाइट्स

$ch = curl_init(); 
$fp = fopen($bFile, 'r'); 
curl_setopt($ch, CURLOPT_URL, 'ftp://'.FTP_SERVER .'/'.FTP_DIRECTORY.$file_name); 
curl_setopt($ch, CURLOPT_USERPWD, FTP_USER.':'.FTP_PASS); 
curl_setopt($ch, CURLOPT_UPLOAD, 1); 
curl_setopt($ch, CURLOPT_INFILE, $fp); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($bFile)); 
curl_setopt($ch, CURLOPT_FTP_USE_EPSV, false); 
curl_exec($ch); 

मैं भी कोड में से निपटने के लिए कुछ बुनियादी त्रुटि है जहां cURL एक त्रुटि देता है:

यह मेरा PHP कोड है

if (curl_error($ch)) { 
    throw new Exception("File could not be sent via FTP: " . curl_error($ch)); 
} 

हालांकि, मैं ध्यान दें है कि इस उदाहरण में कोई अवसर जहां अपवाद फेंक दिया गया है और कोड निष्पादन जारी है।

क्या मेरे पास कोई कारण नहीं है कि मेरे फाइल सिस्टम पर 5 केबी सीएसवी फ़ाइल है, लेकिन एफ़टीपी सर्वर मैं फाइल भेज रहा हूं जिसमें केवल शून्य बाइट फ़ाइल है? क्या यह साल के इस समय में उच्च मात्रा में यातायात के कारण संभवतः एक संचरण मुद्दे को इंगित करता है?

+0

करने के लिए कुछ प्रवेश जोड़ना चाहिए। 'Curl_exec' कॉल से पहले और बाद में लॉग पॉइंट जोड़ने पर विचार करें? क्या आपके पास [एफ़टीपी एक्सटेंशन] (http://php.net/book.ftp) स्थापित है? उपयोग करने के लिए यह अधिक परेशान है, लेकिन आप इससे बेहतर त्रुटियों को जोड़ सकते हैं। – Charles

+0

हां, समस्या निवारण के लिए यह एक अजीब मुद्दा है क्योंकि यह हर फ़ाइल या यहां तक ​​कि सभी बार भी नहीं हो रहा है। यह 500 में 1 फ़ाइल की तरह है, या इससे भी अधिक। – crmpicco

उत्तर

2

चूंकि आप इसे उच्च ट्रैफ़िक के दौरान उल्लेख करते हैं। क्या यह संभव है कि सीएसवी फाइलों पर बहुत सी पढ़ या पढ़ने/लिखने की गतिविधि है जिसे आप भेजने की कोशिश कर रहे हैं? शायद यह फॉपेन वास्तव में विफल रहता है और इस प्रकार आप 0 बाइट भेज रहे हैं, लेकिन सही फ़ाइल नाम के साथ। इससे केवल एक चेतावनी उत्पन्न होगी जिससे पकड़ा नहीं जाएगा।

शायद आप ऐसा लगता है कि समस्या निवारण के लिए एक असली भालू विभिन्न मूल्यों आप कर्ल के साथ भेज रहे हैं, जैसे filesize($bFile) और $fp

+0

सीएसवी फाइलें बनाई गई हैं, जिन्हें एक स्क्रिप्ट द्वारा लिखा गया है और फिर हटाया गया है (वही है जो इसे भेजता है), इसलिए मुझे नहीं लगता कि फ़ाइल पर बहुत सी पढ़ाई/लिखने की गतिविधि होगी। तो फ़ाइल के फ़ाइल आकार के चारों ओर लॉगिंग करना एक अच्छा मुद्दा है, मुझे लगता है कि मुझे ऐसा करने की आवश्यकता होगी। – crmpicco

+0

मैंने इस तरह की एक चेक में जोड़ा है 'अगर (फाइलसाइज ($ bFile) == झूठी या फाइलसाइज ($ bFile) ==' 0 ') {'और' if ($ fp === false) {'जांचने के लिए 'fopen' असफल रहा है, इसलिए हम देखेंगे कि क्या यह मुझे खाली फ़ाइलों को भेजने के लिए समस्या को कम कर सकता है। – crmpicco

संबंधित मुद्दे