Προς το περιεχόμενο

Πρόβλημα με txt αρχείο


Uberalles_gr

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα παιδιά,

 

έχω στον 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);

 

Κάποια ιδέα ρε παιδιά γιατί δεν μου αναγνωρίζει το να αλλάξει γραμμή?

Δημοσ.

"μου τα βγάζει".. που σου τα βγάζει;

υποθέτω οτι θελεις να ανοιγει παράθυρο 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

Δημοσ.

Καταρχάς, σε ευχαριστώ για την απάντησή σου.

 

Το παράθυρο το ανοίγω κανονικά και το αρχείο το σώζω κανονικά ΑΛΛΑ όταν το ανοίγω με το notepad τότε έχω το πρόβλημα. (με wordpad είναι μια χαρά)

Το πρόβλημα είναι ότι το αρχείο έχει 5 γραμμές και όταν το κατεβάζω μου τις βγάζει όλες σε μία και ΜΑΛΛΟΝ δεν αναγνωρίζει το \r\n (αλλαγή γραμμής) και μου βγάζει ένα κουτάκι στο σημείο που έπρεπε να αλλάξω γραμμή.

 

Επομένως, δεν είναι θέμα το πως να κατεβάσω ατο αρχείο αλλά γιατί μου το βγάζει έτσι.

 

Υ.Γ.

header("Content-type: text/plain"); ---> Το άλλαξα αλλά τίποτα

Δημοσ.

μπορει να φταιει το 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 ).

Δημοσ.

Με παραξήγησες..

 

Δεν χρησιμοποιώ το Notepad για να προγραμματίσω.

 

Ο πελάτης θέλει κάποια δεδομένα σε txt αρχεία (τα χρησιμοποιεί σε κάποια άλλη εφαρμογή καμία σχέση με το δικό μου) αλλά μου προκύπτει αυτό το θέμα με την αλλαγή γραμμής.

 

Τα αρχεία τα δημιουργώ εγώ από μία php εφαρμογή και για να αλλάξω γραμμή χρησιμοποιώ το \r\n

 

Τοπικά παίζει μια χαρά αλλά πάνω μου σπάει τα νεύρα μου

Δημοσ.

Δεν ειπα οτι προγραμματιζεις με νοτπαντ. ελεγχεις το αρχειο με νοτπαντ. παρε άλλον.

και απ'οτι φαινεται αυτο δεν χρειάζεται. ο πελατης και η εφαρμογή του το διαβάζουν καλά; αυτο εχει σημασία.

με αλλα λογια, συζηταμε τωρα για προβλημα του notepad, ή για php ?

Δημοσ.

Χαχαχαχ έχουμε μπερδευτεί λίγο.

 

Το πρόβλημα είναι το εξής :

Όταν κατεβάζω χειροκίνητα το αρχείο .txt από τον server μέσω του ftp είναι μια χαρά.

Αλλά όταν μέσα από μία σελίδα php που έχω φτιάξει το κατεβάζω τότε έχει πρόβλημα το αρχείο .txt στην αλλαγή γραμμής.

Δημοσ.

το 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 ..... ?

Δημοσ.

Βασικά τοπικά παίζει μια χαρά η όλη διαδικασία αλλά πάνω στον server Που σίγουρα έχουν και διαφορετικό php.ini δεν μου αναγνωρίζει το \r\n.

 

Έχω δοκιμάσει και με \r\n και με \r Και με \n αλλά το αποτέλεσμα το ίδιο....

 

Έχω αγανακτήσει...

Δημοσ.

κατι άλλο..

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).

Δημοσ.

Δυστυχώς δεν ξέρω τι είναι ο server.

 

Στον server έχει 1.683 bytes και όταν το κατεβάζω από το ftp μου το κάνει 1.711 αλλά παίζει σωστά.

 

Όταν δε το κατεβάζω μέσα από την Php και μου το βγάζει λάθος το αρχείο είναι 1.683

 

Χμμμμμμμμμμ......

 

Το δοκίμασα και αυτό με το auto_detect_line_endings αλλά τίποτα.

 

Τεσπα περιμένω να δω τι θα μου απαντήσει ο πελάτης με το εάν υπάρχει πρόβλημα και εάν υπάρχει θα επανέλθω δριμύτερος !!

 

Ευχαριστώ για τον χρόνο σου

Δημοσ.

Ο 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, να το φτιάχνεις εξ' αρχής έτσι.

καλό κουράγιο... νομιζω το εξαντλήσαμε :)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...