Uberalles_gr Δημοσ. 16 Μαρτίου 2010 Δημοσ. 16 Μαρτίου 2010 Καλημέρα παιδιά, έχω στον server κάποια αρχεία txt, τα οποία τα δημιουργώ εγώ μέσα από μία εφαρμογή που έχει το site. Όλα μια χαρά εδώ. Όταν τα κατεβάζω από τον server με το ftp μια χαρά, αλλά όταν τα κατεβάζω μέσω μίας σελίδας σε php δημιουργείται ένα πρόβλημα στο ότι δεν αναγνωρίζει να αλλάξει γραμμή στο txt αρχειάκι και μου τα βγάζει όλα τα δεδομένα σε μία γραμμή και εκεί που υποτίθετε είναι το \r\n βγάζει ένα κουτάκι. Ο κώδικας που κάνω download το αρχείο είναι : > $filename = "file_name.txt"; $pathname = "path_name/".$filename; $fr = fopen($pathname, 'r'); $filedata = fread($fr, filesize($pathname)); fclose($fr); header ( 'Content-Length: ' . filesize ( $pathname ) ); header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=$filename"); readfile($pathname); Κάποια ιδέα ρε παιδιά γιατί δεν μου αναγνωρίζει το να αλλάξει γραμμή?
random Δημοσ. 16 Μαρτίου 2010 Δημοσ. 16 Μαρτίου 2010 "μου τα βγάζει".. που σου τα βγάζει; υποθέτω οτι θελεις να ανοιγει παράθυρο save as.. στον χρήστη, και να πάει στο δίσκο του, ακριβώς ίδιο αρχειο με ότι έχεις στον σερβερ. ερ: ο σερβερ ειναι linux; σε πρώτη φάση άλλαξε το header("Content-type: application/octet-stream"); σε header("Content-type: text/plain"); σε 2η φαση, να δοκιμάσεις πώς παιζει και στους 5 leader browsers (ΙΕ7, ΙΕ8, firefox,chrome,opera) γιατι ειδικά οι ie ερμηνεύουν όπως τους κανει κέφι το "Content-disposition: attachment; filename=χχχχχ". * επίσης παιζει ρόλο, με ποιον editor θα ανοιξει ο χρηστης το αρχειο απο το δισκο του. (windows notepad = φορ δε θηρία ) αν θελεις το αρχειο να ανοιγει στον browser, χωρις save as.. θελει καποιες αλλαγές. http://en.wikipedia.org/wiki/List_of_HTTP_headers http://en.wikipedia.org/wiki/Mime_type
Uberalles_gr Δημοσ. 16 Μαρτίου 2010 Μέλος Δημοσ. 16 Μαρτίου 2010 Καταρχάς, σε ευχαριστώ για την απάντησή σου. Το παράθυρο το ανοίγω κανονικά και το αρχείο το σώζω κανονικά ΑΛΛΑ όταν το ανοίγω με το notepad τότε έχω το πρόβλημα. (με wordpad είναι μια χαρά) Το πρόβλημα είναι ότι το αρχείο έχει 5 γραμμές και όταν το κατεβάζω μου τις βγάζει όλες σε μία και ΜΑΛΛΟΝ δεν αναγνωρίζει το \r\n (αλλαγή γραμμής) και μου βγάζει ένα κουτάκι στο σημείο που έπρεπε να αλλάξω γραμμή. Επομένως, δεν είναι θέμα το πως να κατεβάσω ατο αρχείο αλλά γιατί μου το βγάζει έτσι. Υ.Γ. header("Content-type: text/plain"); ---> Το άλλαξα αλλά τίποτα
random Δημοσ. 16 Μαρτίου 2010 Δημοσ. 16 Μαρτίου 2010 μπορει να φταιει το codepage που εμφανιζει by default o notepad, μπορει να φταιει το συγκεκριμενο font του notepad, μπορει να φταιει οτι εχει αλλαγες γραμμής τυπου *nix (LF), και οχι windows (CR+LF) 1. σαν προγραμματιστής θα επρεπε να χρησιμοποιείς εναν σοβαρό editor, που δειχνει τα παράγματα όπως είναι, και όχι όπως θέλει. ο καλυτερος δωρεάν (για win) : notepad++ o καλυτερος shareware : Ultraedit (πχ, με τον ultraedit, πατάς ενα control+H (hex view) και βλεπεις αμέσως ποιός χαρακτήρας ascii ειναι αυτο το "κουτάκι" ) 2. οι τελικοί χρήστες θα κάνουν αυτο που κανεις εσυ τώρα (να ανοιγουν το txt με editor) ή απλα θα το χρησιμοποιουν σαν input σε μια αλλη εφαρμογή; αν το 2ο.. μην ασχολησαι πως φαινεται στο notepad. σημασια εχει να το διαβαζει σωστα η εφαρμογή. αν το 1ο, αφου δεν μπορεις να τους επιβαλεις να μην χρησιμοποιούν notepad, θα αλλαξεις τον τροπο που φτιαχνεις το αρχείο. πχ. διαβαζεις γραμή-γραμμή, και στο τέλος κολλάς ενα CR+LF ( ascii 13 + ascii 10) (ενω τώρα το linux -αν ειναι τέτοιος ο σερβερ- ή η php βαζουν στο τέλος σκέτο LF ).
Uberalles_gr Δημοσ. 16 Μαρτίου 2010 Μέλος Δημοσ. 16 Μαρτίου 2010 Με παραξήγησες.. Δεν χρησιμοποιώ το Notepad για να προγραμματίσω. Ο πελάτης θέλει κάποια δεδομένα σε txt αρχεία (τα χρησιμοποιεί σε κάποια άλλη εφαρμογή καμία σχέση με το δικό μου) αλλά μου προκύπτει αυτό το θέμα με την αλλαγή γραμμής. Τα αρχεία τα δημιουργώ εγώ από μία php εφαρμογή και για να αλλάξω γραμμή χρησιμοποιώ το \r\n Τοπικά παίζει μια χαρά αλλά πάνω μου σπάει τα νεύρα μου
random Δημοσ. 17 Μαρτίου 2010 Δημοσ. 17 Μαρτίου 2010 Δεν ειπα οτι προγραμματιζεις με νοτπαντ. ελεγχεις το αρχειο με νοτπαντ. παρε άλλον. και απ'οτι φαινεται αυτο δεν χρειάζεται. ο πελατης και η εφαρμογή του το διαβάζουν καλά; αυτο εχει σημασία. με αλλα λογια, συζηταμε τωρα για προβλημα του notepad, ή για php ?
Uberalles_gr Δημοσ. 17 Μαρτίου 2010 Μέλος Δημοσ. 17 Μαρτίου 2010 Χαχαχαχ έχουμε μπερδευτεί λίγο. Το πρόβλημα είναι το εξής : Όταν κατεβάζω χειροκίνητα το αρχείο .txt από τον server μέσω του ftp είναι μια χαρά. Αλλά όταν μέσα από μία σελίδα php που έχω φτιάξει το κατεβάζω τότε έχει πρόβλημα το αρχείο .txt στην αλλαγή γραμμής.
random Δημοσ. 17 Μαρτίου 2010 Δημοσ. 17 Μαρτίου 2010 το AAAK.txt ειναι windows type : CR+LF (hex 0D+0A) το AAAK_wrong.txt ειναι *nix : μονο LF's (hex 0A) εξ'ου και η διαφορά στο μέγεθος 1711 - 1683 = 28. ενα λιγότερο byte για καθε γραμμή. οπως στα έλεγα. αν ανοιγες το αρχειο με ultraedit θα τα εβλεπες και τα δυο αρχεία ίδια γιατι καταλαβαινει ολα τα είδη αλλαγης γραμμής. ενω το Νοτεπαντ, μονο τον τρόπο των windows. ισως κατι παιξει στο setup του php (php.ini). δινεις εσυ \r\n και βαζει μονο \r ..... ?
Uberalles_gr Δημοσ. 17 Μαρτίου 2010 Μέλος Δημοσ. 17 Μαρτίου 2010 Βασικά τοπικά παίζει μια χαρά η όλη διαδικασία αλλά πάνω στον server Που σίγουρα έχουν και διαφορετικό php.ini δεν μου αναγνωρίζει το \r\n. Έχω δοκιμάσει και με \r\n και με \r Και με \n αλλά το αποτέλεσμα το ίδιο.... Έχω αγανακτήσει...
random Δημοσ. 17 Μαρτίου 2010 Δημοσ. 17 Μαρτίου 2010 κατι άλλο.. o server einai unix? το πρωτότυπο αρχείο (που βρισκεται στον σερβερ). Οχι αυτο που κατεβασες με FTP. τι μεγεθος έχει; 1711 ή 1683 ?? αν εκει ειναι 1683, και μεταφεροντας το με ftp, φτανει sto pc σου 1711 bytes, tote σε μπερδεύει το ftp. κανε ftp σε binary mode . ------------------------------ υπαρχει ενα σετινγκ στο Runtime Configuration (php.ini) auto_detect_line_endings (default "0"), κανε το "1" , μπας και παιζει ρόλο. (εάν το πρωτότυπο ειναι όντως 1711 και στο χαλαει η php. αλλιως φταιει το ftp ascii transfer mode).
Uberalles_gr Δημοσ. 17 Μαρτίου 2010 Μέλος Δημοσ. 17 Μαρτίου 2010 Δυστυχώς δεν ξέρω τι είναι ο server. Στον server έχει 1.683 bytes και όταν το κατεβάζω από το ftp μου το κάνει 1.711 αλλά παίζει σωστά. Όταν δε το κατεβάζω μέσα από την Php και μου το βγάζει λάθος το αρχείο είναι 1.683 Χμμμμμμμμμμ...... Το δοκίμασα και αυτό με το auto_detect_line_endings αλλά τίποτα. Τεσπα περιμένω να δω τι θα μου απαντήσει ο πελάτης με το εάν υπάρχει πρόβλημα και εάν υπάρχει θα επανέλθω δριμύτερος !! Ευχαριστώ για τον χρόνο σου
random Δημοσ. 17 Μαρτίου 2010 Δημοσ. 17 Μαρτίου 2010 Ο server σου ειναι unix/linux. φτιάχνεται εκει ενα αρχειο 1683 bytes, με LF's η php διαβαζει 1683 bytes, και σου δίνει 1683 bytes. αρα κανει σωστα τη δουλειά της. (αυτο πρεπει να κανει ενα προγραμμα μεταφοράς αρχείων. να παραδίδει ότι παραλαμβάνει, και οχι να "μεταφράζει" όπως νομίζει) το ftp client, επειδη εχεις επιλέξει να κάνει transfers σε ascii mode, μεταφράζει τα unix LF, σε windows CR+LF, (γιατι έτσι συνιθίζεται για μεταφορά text αρχείων, αλλα όχι και για σκοπους debugging ) και έτσι τα βλέπεις σωστα στο windows notepad. αν επιλέξεις transfer σε binary mode, δεν θα το κάνει. συμπέρασμα: δεν εχει πρόβλημα το πρόγραμα. το λάθος ειναι στον τρόπο ελέγχου. και η χρηση notepad ειναι λαθος, και το ftp σε ascii mode. Αν θες το αρχείο να έχει CR+LF, να το φτιάχνεις εξ' αρχής έτσι. καλό κουράγιο... νομιζω το εξαντλήσαμε
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.