Wednesday, February 21, 2007

PHP, MySQL 4.1 UTF-8 encoding και PIPES!

O provider κάνει αναβάθμιση σε ανύποπτο χρόνο, η 4.0x ΜySQL γίνεται 4.1 η οποία έχει default encoding UTF-8 . Η βάση μας εδώ και 3 χρόνια iso- greek . To backup της βάσης iso-greek. H μετατροπή χάος ΟΛΑ ΝΑ ΕΙΝΑΙ ??????? ! Γαμώ το κέρατο μου. Τεσπα με υπομονή και επιμονή του dionisi αλλάζει σε UTF-8 το sql script κάνει 1000 φορές import μιας και μαλακιζόταν το phpmyadmin μια το ένα μια το άλλο μια το script και μετα απο tip φίλων(thanx Βαγγέλη)....έρευνα μέσα στο χάος του PHPNUKE για να σετάρει στο connection της βάσης (εκει που το κανει) την ρυθμιση να διαβάζει UTF-8. 1,5 μέρα ολόκληρη 2 ξενύχτια..και νεύρα πολλά! Υποθέτω οτι ο Dion θα ποστάρει και τις λεπτομέριες στο blog του..οπότε θα το έχουμε και σαν reference post. Οσο για το jhug..απο τον Μάρτιο με το καλό αποχαιρετούμε τις LAMP pipes ...και πάμε σε κάτι που αρμόζει σε ενα κανονικό JUG.. άντε γεια..γαμώ την PHP γαμώ.

ένας λόγος που μου αρέσει το hype με την Ruby είναι το γεγονός οτι το RoR ειναι ενα framework..προφανώς στον κόσμο της PHP ακόμα δεν ξέρουν αυτη την λέξη γι'αυτο θα παραμείνει χυμα γλώσσα -και χυμα υλοποιήσεις!

ωραιο αρθρο εδώ μου το υπενθύμισε ένας jug leader.

20 comments:

  1. Πάρη,

    Ρίξε μια ματιά στο Zend Framework για PHP.

    Δίνει μια τελείως διαφορετική άποψη στον προγραμματισμό PHP.. πιο Οbject Oriented

    ReplyDelete
  2. ευχαριστώ αγαπητέ .έχω ακουσει για το Zend και μερικά ακόμα ισως ειναι μια καλή εναλλακτική Παρολα αυτα δεν ξερω που διάβαζα τώρα τελευταία ότι παρόλο που εχουν περάσει κάποια χρόνια απο τον ερχομό της PHp5 κανεις δεν την χρησιμοποιεί..να υποθέσω ουτε και τα framework μιας και η culture των php programmer δεν μπορεί να συμβαδίσει με τέτοιες συνήθειες. Anyway ruby is the way I Guess..

    ReplyDelete
  3. Τελικά το πρόβλημα ήταν καθαρά η PHP. Από το 2ο import η βάση είχε ανέβει κανονικά... Απλά η PHP αρνιόταν πεισματικά να βοηθήσει.
    Τώρα πια γνωρίζούμε ότι η PHP έχει άγνοια για τα character set και ακολουθεί την τακτική "ότι κάτσει".
    Εδώ να τονίσω την επιμονή της MySQL να υποθέτει πως όλα τα δεδομένα είναι swedish! Βέβαια και οι developers couldn't help it... είναι σουηδοί οι καημένοι...
    Όσον αφορά το comment του Γ.Ι για το framework, που κάνει πιο Object Oriented τον τρόπο προγραμματισμού σε PHP, θα γελάσω δυνατά ΧΑ ΧΑ, καθώς τέτοιες προσπάθειες μου θυμίζουν πιτσιρίκια που θέλουν να οδηγήσουν αυτοκίνητο, αλλά φυσικά δε μπορούν και φτιάχνουν αυτοκινητάκια στην άμμο!

    ReplyDelete
  4. On top του σχολίου που έκανα, για τα παιδάκια με τα παιχνίδια στην άμμο έρχεται αυτό:
    http://www.codegear.com/Products/Delphi/DelphiforPHP/tabid/237/Default.aspx

    Για γέλια ή για κλάματα;

    ReplyDelete
  5. Αφού λοιπόν θέλετε flamewar, θα τον έχετε! :-)

    Όποιος χρησιμοποιεί γραφικά περιβάλλοντα, κουμπάκια, χρωματάκια, GUI και web interfaces για να κάνει δουλειά αυτά τραβάει.

    Οι άνδρες το κάνουν σε command line και ξέρουν ανά πάσα στιγμή τί είναι το encoding που βλέπουν.

    Όσο για την java, σιγά την γλώσσα! Δεν είναι αρκετά εύκολη για να κάνεις quick'n'dirty πράγματα (όπως οι περισσότερες scripting γλώσσες), ούτε αρκετά σοβαρή για να γράψεις ένα OS...

    :-p :-p

    ReplyDelete
  6. χε

    εμεις ξεραμε το encoding η μαλακισμενη PHP δεν ήξερε! το bitching γινεται γιατί μπηκαμε στην διαδικασία να δουμε...τον κωδικα της μαλακίας..και φυσικα υπαρχουν τα κλασικα συμπερασματα του χαους. Variebles εδω.. system variables απο εκει...κλασικη PHP κατάσταση..οτι να ναι!

    Τωρα οσο αναφορα το quick and dirty.. αν ειναι παπαριες του τυπου οριζω ενα variable και το χρησιμοποιώ σε 100 source πιο κάτω..ναι δεν θα το ηθελα..παρολα αυτα νομιζω οτι ειναι θέμα συνηθειας..μπορώ να φιάξω οτι δήποτε quick and dirty εχεις στο μυαλο σου με Java..οπως και εσυ θα το εκανες με Python!

    οσο αναφορα το OS .υπαρχει κάτι
    http://ei.cs.vt.edu/book/chap21/javaos.html


    τώρα βεβαια οποιοι θεωρουν την Java inappropriate απορώ ..τι λενε οταν τα transaction τους στο amazon παίζουν πάνω σε j2ee container...εκτός και αν γουστάρετε να γυρισουμε πισω σε εποχες CGI πραγματικα πολυ παραγωγικές τεχνολογίες.


    Η PHP θα πεθάνει σύντομα και νομίζω ο νέος βασιλίας ειναι η Ruby στα scripting πράγματα ειδικα για Web.

    το γεγονός οτι οι 2 Ruby creators δουλευουν για την Sun και οσο περναει ο καιρός γινεται integrated μέσα στο JVM ..με κάνει να νιώθω ακόμα καλύτερα.


    respect vrypan...

    ReplyDelete
  7. Εντάξει η PHP δε νομίζω ότι θα πεθάνει... Με το momentum που έχει αποκτήσει λόγω των πωρωμένων coding freaks του open source κινήματος, θα συνεχίσει να υπάρχει, ως μια καθαρά 2-tier dirty solution για μια ξεπέτα που θα θέλουν να αποκαλούμε web application. Παράλληλα, δύσκολα θα μπει η Java στο παιχνίδι του quick n dirty, όχι γιατί δε μπορεί, αλλά γιατί όποιος κάτσει να φτιάξει κάτι open source σε Java θα το κάνει με τον καλύτερο δυνατό τρόπο.
    Να τονίσω εδώ, ότι είναι misconseption πως η Java είναι δύσκολη και δεν παρέχει τις ευκολίες μιας interpreted λύσης. Εχω δει άτομα να χρησιμοποιούν τη Java ως procedural, χρησιμοποιώντας ένα μόνο object (πρώτα απ' όλα τους μαθητές μου... αυτό όμως με κάνει μάλλον κακό καθηγητή...), αλλά αυτός φυσικά δεν είναι ο ενδεδειγμένος τρόπος για quick n dirty στη Java.
    O ενδεδειγμένος τρόπος είναι Java as scripting language! Δείτε το BeanShell (bsh), το οποίο είναι ενσωματωμένο στις περισσότερες Linux διανομές, και μπορεί να χρησιμοποιηθεί για scripting πολύ όμορφα! Δείτε επίσης την υποστήριξη scripting στη Java 6. Πιστεύω ακράδαντα πως η χρήση της Java θα ανέβει κατακόρυφα από τους παραπάνω coding freaks τώρα που έγινε open source. Οχι για κάποιον άλλο λόγο, αλλά γιατί είναι πολύ πιο κατανοητή και εύκολη η σύνταξη της από την PHP!
    Και Παναγιώτη, with all due respect, αλλά το comment ότι δεν είναι αρκετά σοβαρή γλώσσα για να γράψεις ένα OS, το βλέπω σαν μια δικαιολογία που ακούγεται μόνο σε flamewars, καθώς η αλήθεια είναι ότι μπορείς να κάνεις όλα τα άλλα εκτός από τη δημιουργία ενός operating system... Όπως και να 'χει είναι και αυτό pretty unique...

    ReplyDelete
  8. [ακολουθούν εικασίες :-)]

    Εικασία α) παλιά to site ήταν σε iso-8859-7 charset
    Εικασία b) τα Ελληνικά στη βάση ήταν όντως ascii (και προφανώς greek) και όχι unicode "χωσμένα με το ζόρι" σε mysql 4 (δλδ από phpMyAdmin βλέπατε ελληνικά και όχι ένα σωρό χαρακτήρες με πολλά ΞΞΞΞΞ)

    Αν ισχύουν αυτά μάλλον αρκούσε στο PHP εκεί που γίνεται το connection με την mysql να γινόταν execute αμέσως μετά ένα "set names greek".

    Και λογικά δε θα χρειαζόταν καμία άλλη αλλαγή, ούτε ξανά import από phpMyAdmin.

    Απ'την άλλη μπορεί τα πράγματα να ήταν όντως πολύ πιο σύνθετα!

    ReplyDelete
  9. οταν πρωτο ειδα το χαος...ολα τα data..δηλαδη τα query που έκανα ...
    απο phpmyadmin μου εδιναν πισω..?????????? latin_swedish ολοι οι πινακες.

    ReplyDelete
  10. Τα ??? από μόνα τους δυστυχώς δε λένε τίποτα... εξαρτάται από τις ρυθμίσεις της mysql και του phpMyAdmin (στην κεντρική σελίδα έχει ρυθμίσεις για το connection charset και κάποια ακόμα).

    Πάντως το ίδιο *ακριβώς* πρόβλημα θα υπήρχε είτε επρόκειτο για php, java, perl κλπ.

    Το θέμα είναι ότι από την mysql 4.1 τα δεδομένα εσωτερικά αποθηκεύονται σε unicode (utf8) δλδ 2 bytes / char για τα Ελληνικά, σε αντίθεση με πριν που ήταν ansi (1 byte / char). Έτσι αφού το phpNuke εξακολουθούσε να δηλώνει στον browser ότι πρέπει να χρησιμοποιεί iso-8859-7 ενώ του έστελνε utf8 encoded δεδομένα, τα Ελληνικά έβγαιναν λάθος. Η λύση της mysql σε αυτό είναι εντολές με τις οποίες καθοδηγείς την mysql να κάνει convert πριν σου στείλει τα δεδομένα (και έτσι δεν αλλάζεις κάτι στο site).

    Από κει και πέρα υποθέτω χειροτέρεψαν τα πράγματα με το latin1_swedish (default) που πήρε η βάση σας κατά το upgrade...

    Αυτά και ελπίζω να ξελάσπωσα λίγο την PHP, που δεν έφταιγε στη συγκεκριμένη περίπτωση. Όσο για το αν το phpNuke είναι σαλάτα ή όχι... αυτό πιστεύω είναι κυρίως θέμα developer. Φαντάσου πχ ένα CMS γραμμένο από τη Paula:

    http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx

    ;-)

    ReplyDelete
  11. Από τα 8 χρόνια που είμαι σε αυτή την κωλοδουλια σχεδόν 25% του χρόνου μου έχει αφιερωθεί σε encoding problems. Είναι μια πολύ πονεμένη ιστορία. Πάντως η Java δόξα τω Cthulhu βολεύει αφάνταστα για τέτοια θέματα.

    ReplyDelete
  12. Lida αν όντως ασχολείσαι 2 χρόνια με τα encodings τότε πρέπει να αλλάξεις δουλειά! :)

    Το οτι κανείς δεν χρησιμοποιεί PHP 5 έχει να κάνει εν μέρη με το οτι λίγα hosts την υποστηρίζουν.

    Όσο για framework: http://www.cakephp.org/

    ReplyDelete
  13. Ίσως. Πάντως σίγουρα πρέπει να αλλάξουν δουλειά οι %@#%$#^ που γράφουν software που απευθύνετε σε μη αγγλόφωνους χωρίς να λαμβάνουν υπόψη θέματα internationalization.

    ReplyDelete
  14. ASP.NET είναι η λύση...

    ReplyDelete
  15. Ανώνυμε έχεις δίκιο! Αλλάζω γλώσσα τώρα :P

    ReplyDelete
  16. To RoR den einai tipota allo apo thn efarmogh ths theorias (pollwn theoriwn basika blepe MVC, DRY, KISS, XP) sthn praksh me th xrish ths ruby. Ama se endiaferei na deis paromoio framework se php des to symfony-project.com.

    ReplyDelete
  17. hello!
    Πρόσεξα μόλις το παρόν κείμενο και θα ήθελα πολύ μια βοήθεια, (αν φυσικά υπάρχει χρόνος και διάθεση) σχετικά με την προσπάθεια ISO-8859-7 σε UTF-8 που έγινε στο http://www.jhug.gr ...

    Έχω βρει κάποια χρήσιμα Links/πηγές όπου και προσπάθησα να βγάλω λίγο άκρη:
    http://www.cpgnuke.com/FAQ/cat=14.html
    http://www.tiago.ca/nuke/UTF-8%20Information/Readme.html
    http://www.oreillynet.com/lpt/wlg/9022
    http://www.nukedgallery.net/postp10819.html#10819

    Με κύρια βάση στο 2ο όπου στηρίχθηκα, έβγαλα κάποιο αποτέλεσμα, έχω την εντύπωση δηλαδή πως έγινε η μετατροπή στη βάση, ωστόσο η σελίδα δεν "βγαίνει" σε UTF-8 encoding αυτόματα, παρόλο που σε meta tags το δηλώνουμε. Στα headers μέσω php μάλλον κάτι φταίει και ίσως διορθωθεί, i'll keep seeking the solution..

    Αυτό που με προβληματίζει, είναι πως ακόμη και manually αν βάλω από τον browser μου να εμφανίζει το charset σε utf8, ενώ το κείμενο κλπ που παίρνει από τη βάση είναι εμφανίζεται καλά, τα στατικά variables της Γλώσσας (μενού, περιγραφές κλπ) βγαίνουν με "μικρούς ρόμβους με ερωτηματικό μέσα τους"...

    Υπάρχει κάποιο στοιχείο επικοινωνίας για να ρωτήσω πώς το πετύχατε, για να μην ζαλίζω κόσμο (που δεν θα το ήθελα) μέσα από τα comments? Κι εγώ σε phpNuke δουλεύω, οπότε θα εκτιμούσα κάθε βοήθεια!

    keep up the good work! ;)

    ReplyDelete
  18. Παιδιά είστε πολύ αρχαίοι,
    ώρα να εκσυχρονιστείται λίγο
    με .ΝΕΤ και Sql Server,
    to SilverLight είναι εδώ!

    ReplyDelete
  19. "εκσυχρονιστείται".... xD

    ReplyDelete