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

PHP-MySql-Javascript - Διαφορετική συμπεριφορά εφαρμογής σε webserver και σε apache τοπικα!?


katina

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

Καλησπέρα σας, μία εφαρμογή που έχω φτιάξει ενώ δουλεύει μία χαρά σε webserver, σε τοπικό apache server (wamp - αλλά δοκίμασα και με xamp) δεν εμφανίζει τα ελληνικά και δεν δουλεύει τα suggestions στο search (javascript).

 

Έχει ιδέα κανείς γιατί μπορεί να συμβαίνει;

 

Ευχαριστώ!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Και εμένα μου συναίβει κάτι παρόμοιο... απλά όταν έστελνα δεδομένα από μια φόρμα το επόμενο αρχείο τα έδειχνε ως περίεργους χαρακτήρες παρόλο που ήταν utf8 και στον localserver δούλευε κανονικότατα. Απλά θεώρησα πως φταίει το ότι είναι δωρεάν ο σέρβερ που το δοκίμασα.

 

Μήπως και στη δική σου περίπτωση συμβαίνει το ίδιο;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Κατα πάσα πιθανότητα γίνονται διάφορα πράγματα "λάθος" στην τοπική σου εγκατάσταση.. Άνοιξε μια Inspect Element στην κονσολα να δεις σφάλματα. Χρησιμοποιείς βάση δεδομένων; Αν ναι τι charset έχεις; Τα αρχεία του κώδικά σου είναι και οι δικοί τους χαρακτήρες σε utf; Τι λειτουργικό έχεις; Τι Locale έχει? Η εγκατάσταση php τι ρυθμίσεις έχει;

 

Γενικά είναι ένα μπλέξιμο που μπορεί να σπάσει σε πολλά σημεία..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όλα είναι ίδια σε βάση, στα αρχεία κτλ αφού τα πήρα όπως ήταν.

 

Αυτό με την php ίσως έχεις δίκιο - ποια ρύθμιση να προσέξω όμως;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μερικές ιδέες:

 

1) Δοκίμασε τα παρακάτω στο php.ini σου:

default_charset = "utf-8"
iconv.output_encoding = "utf-8"
mysql.connect_charset = "utf8"
mysqli.connect_charset = "utf8"
mbstring.language = "UTF-8"
mbstring.internal_encoding = "UTF-8"
mbstring.http_input = "UTF-8"
mbstring.http_output = "UTF-8"

Αν δεν έχεις πρόσβαση, μπορείς να τα ορίσεις στον κώδικα με την ini_set().

 

2) Έλεγξε το default encoding της βάσης και του συγκεκριμένου πίνακα. Αν δεν το όρισες explicitly όταν δημιούργησες το schema, μπορει να μην είναι utf8.

SELECT schema_name,default_character_set_name FROM information_schema.SCHEMATA where schema_name="$DBNAME"
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
       information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "$DBNAME"
  AND T.table_name = "$TABLENAME";

3) Έλεγξε ότι τα δεδομένα είναι καταχωρημένα σαν utf8 -π.χ. αν τα πέρασες από κάποιο text sqldump, επαλήθευσε ότι το dump είναι σε utf8. Αυτό μπορείς να το δες εύκολα και με την εντολή file σε unixoειδή ή, στα windows, ανοίγοντας το αρχείο με έναν editor σαν τον notepad++ και πηγαίνοντας στο menu Εncoding, "encode in utf-8", και βλέποντας αν το κείμενο εμφανίζεται σωστά. Φυσικά το ίδιο μπορεις να δοκιμάσεις και σε linux/*nix/mac π.χ. με τον vi και set encoding=utf-8.

 

4) Έλεγξε ότι ο browser προσπαθεί να αποκωδικοποιήσει τα δεδομένα σαν utf8. Π.χ. στον Firefox, στο menu View->Character Encoding, είναι επιλεγμένο το Unicode; Αν όχι, το κάνεις indicate στο html σου (meta charset=utf8);

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όπως και οτιδήποτε άλλο ορίζεις στον κώδικα, έχει εφαρμογή μόνο στο συγκεκριμένο execution environment, το οποίο δημιουργείται και καταστρέφεται κάθε φορά που εκτελείς κάτι, αποκλειστικά γι' αυτό που εκτελείς.

 

Ο php-fpm daemon τρέχει instances της php με βάση τις ρυθμίσεις που έχεις στο php.ini, οπότε αν δεν κάνεις include ή require_once ή κάτι αντίστοιχο, πρέπει να το ορίζεις σε κάθε αρχείο, μιας που οταν χτυπήσεις ένα αρχείο, θα τρέξει σε χωριστό instance (με όλα τα αρχεία που ξεκινούν να συνδέονται από αυτό). Στην πράξη βέβαια λογικά θα έχεις κάποιο βασικό αρχείο που γίνεται include παντού, έμμεσα ή άμεσα, για να ορίζεις και άλλα πράγματα που συνήθως χρειάζεσαι να είναι διαθέσιμα, όπως τα connection details της βάσης.

 

Αν χρησιμοποιείς apache και mod_php, μπορείς να το ορίσεις και μέσω .htaccess, με την php_value setting_name, αλλά είναι κακή ιδέα και να χρησιμοποιείς .htaccess και να χρησιμοποιείς mod_php σε production, επειδή σκοτώνουν τις επιδόσεις και τη μνήμη, οπότε δε νομίζω να βρεις πολλούς hosts πλέον που να χρησιμοποιούν mod_php (ελπίζω).

 

Επίσης, αν ο host σου το έχει φτιάξει έτσι, μπορεί να έχει ρυθμίσει τον php-fpm daemon να κοιτά σε συγκεκριμένη τοποθεσία για το php.ini κάθε χρήστη, στην οποία περίπτωση θα μπορούσες να το βάλεις π.χ. στο home σου, οπότε έλεγξέ το. Τέλος, αν έχει και κάποιο fancy σύστημα διαχείρισης (π.χ. cpanel), μπορεί να σου δίνει τρόπο να το κάνεις και μέσω αυτού.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όπως και οτιδήποτε άλλο ορίζεις στον κώδικα, έχει εφαρμογή μόνο στο συγκεκριμένο execution environment, το οποίο δημιουργείται και καταστρέφεται κάθε φορά που εκτελείς κάτι, αποκλειστικά γι' αυτό που εκτελείς.

 

Ο php-fpm daemon τρέχει instances της php με βάση τις ρυθμίσεις που έχεις στο php.ini, οπότε αν δεν κάνεις include ή require_once ή κάτι αντίστοιχο, πρέπει να το ορίζεις σε κάθε αρχείο, μιας που οταν χτυπήσεις ένα αρχείο, θα τρέξει σε χωριστό instance (με όλα τα αρχεία που ξεκινούν να συνδέονται από αυτό). Στην πράξη βέβαια λογικά θα έχεις κάποιο βασικό αρχείο που γίνεται include παντού, έμμεσα ή άμεσα, για να ορίζεις και άλλα πράγματα που συνήθως χρειάζεσαι να είναι διαθέσιμα, όπως τα connection details της βάσης.

 

Αν χρησιμοποιείς apache και mod_php, μπορείς να το ορίσεις και μέσω .htaccess, με την php_value setting_name, αλλά είναι κακή ιδέα και να χρησιμοποιείς .htaccess και να χρησιμοποιείς mod_php σε production, επειδή σκοτώνουν τις επιδόσεις και τη μνήμη, οπότε δε νομίζω να βρεις πολλούς hosts πλέον που να χρησιμοποιούν mod_php (ελπίζω).

 

Επίσης, αν ο host σου το έχει φτιάξει έτσι, μπορεί να έχει ρυθμίσει τον php-fpm daemon να κοιτά σε συγκεκριμένη τοποθεσία για το php.ini κάθε χρήστη, στην οποία περίπτωση θα μπορούσες να το βάλεις π.χ. στο home σου, οπότε έλεγξέ το. Τέλος, αν έχει και κάποιο fancy σύστημα διαχείρισης (π.χ. cpanel), μπορεί να σου δίνει τρόπο να το κάνεις και μέσω αυτού.

 

Η απάντηση σου ήταν άκρως διαφωτιστική! :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...