2008-08-05 20 views
35

मैंने स्थानीय निर्देशिका के अंदर रहने वाले वेबसर्वर को अद्यतन करने के लिए एक PHP-स्क्रिप्ट बनाई है। मैं स्क्रिप्ट को पायथन में माइग्रेट कर रहा हूं। यह अधिकांश भाग के लिए ठीक काम करता है, लेकिन PUT कमांड के बाद फ़ाइल का आकार बदलना प्रतीत होता है। इस प्रकार, फ़ाइल का आकार सर्वर पर फ़ाइल के से अलग है।किसी फ़ाइल में फ़ाइल की प्रतिलिपि बनाने के बाद फ़ाइल आकार अंतर FTP

एक बार जब मैं फिर से FTP सर्वर से फ़ाइल डाउनलोड करता हूं, तो केवल अंतर ही सीआर/एलएफ चिह्न होता है। यह मुझे परेशान करता है क्योंकि एक ही स्क्रिप्ट फ़ाइलों के आकार की तुलना करने के लिए तुलना कर रही है। इसके अलावा, अगर इसका मतलब कुछ भी है, तो स्क्रिप्ट PHP vía ftp_put में पूरी तरह से काम करता है।

from ftplib import FTP 

ftpserver = "myserver" 
ftpuser = "myuser" 
ftppass = "mypwd" 

locfile = "g:/test/style.css" 
ftpfile = "/temp/style.css" 

try: 
    ftp = FTP(ftpserver, ftpuser, ftppass) 
except: 
    exit ("Cannot connect") 

f = open (locfile, "r") 
try: 
    ftp.delete (ftpfile) 
except: 
    pass 

# ftp.sendcmd ("TYPE I") 
# ftp.storlines("STOR %s" % ftpfile, f) 
ftp.storbinary("STOR %s" % ftpfile, f) 
f.close() 

ftp.dir (ftpfile) 
ftp.quit() 

कोई सुझाव?

उत्तर

17

क्या आपको rb का उपयोग करके बाइनरी में लोकफ़ाइल खोलने की आवश्यकता है?

f = open (locfile, "rb") 
+0

आपको बहुत धन्यवाद, यह मेरी आंखों के बीच शॉट था, मैंने इस सप्ताह दीवार के खिलाफ अपने सिर को टक्कर मारकर सभी सप्ताहांत बिताए। यह ftp से स्थानांतरित, रिवर्स परिदृश्य पर भी लागू होता है। – snarkyname77

+0

यह आपकी सलाह के साथ पूरी तरह से काम करता है। धन्यवाद! (2 मिनट में सकारात्मक प्रतिक्रिया, वाह) – PabloG

+0

@PabloG क्या आपने वास्तव में अभी यह टिप्पणी की है, या क्या मुझे एक समय में चूसना पड़ा है? –

3

ठीक है अगर आप विंडोज़ या * निक्स पर्यावरण में अपनी फ़ाइल के गुणों के तहत जाते हैं, तो आपको दो आकार दिखाई देंगे। एक क्षेत्र का आकार है, और एक वास्तविक आकार है। क्षेत्र का आकार बाइट्स में सेक्टरों की संख्या है जो आपकी हार्ड डिस्क पर उपयोग किए जाते हैं। ऐसा इसलिए है क्योंकि दो फाइलें एक ही क्षेत्र में नहीं हो सकती हैं, जिसमें अधिकांश आधुनिक फाइल सिस्टम हैं, इसलिए यदि आपकी फाइल इस क्षेत्र के आधे हिस्से को भरती है तो पूरे क्षेत्र को भरने के रूप में चिह्नित किया जाता है।

तो आप एफ़टीपी सर्वर या इसके विपरीत वास्तविक क्षेत्र आकार में सेक्टर फ़ाइल आकार की तुलना कर सकते हैं।

0

छोटी फाइलें फाइल सिस्टम पर जो भी आकार है, पर एक संपूर्ण नोड लेती है।

मेरा होस्ट एफटीपी में 4kb के रूप में सभी छोटी फ़ाइलों की रिपोर्ट करता है लेकिन एक खोल में एक सटीक आकार देता है, इसलिए यह एक 'फीचर' हो सकता है जो कि FTP क्लाइंट के लिए आम है।