zipos Δημοσ. 24 Οκτωβρίου 2009 Δημοσ. 24 Οκτωβρίου 2009 Έχει φτιάξει κανείς συνάρτηση για να κάνει include αρχεία php? Ε λοιπόν, έφτιαξα εγώ, και δείτε τι κουλό ανακάλυψα. To index.php με την συνάρτηση > <?php function include_layout ($file){ include('Path/'.$file); } $a = 666; include_layout(layout.php); ?> Το layout.php > <?php echo $a; ?> Το παραπάνω παράδειγμα δεν κάνει echo τίποτα. Ενώ αν κάνεις include('Path/'.'layout.php') δουλεύει κανονικά. Να σημειωθεί ότι το παραπάνω ισχύει και για constant μεταβλητές.
mixalis8 Δημοσ. 24 Οκτωβρίου 2009 Δημοσ. 24 Οκτωβρίου 2009 <?php function include_layout ($file){ include('Path/'.$file); } $a = 666; include_layout('layout.php'); ?>
zipos Δημοσ. 24 Οκτωβρίου 2009 Μέλος Δημοσ. 24 Οκτωβρίου 2009 Προφανώς έκανα συντακτικό λάθος καθώς έγραφα το παράδειγμα. Το θέμα όμως δεν στο συντακτικό λάθος.
isay Δημοσ. 24 Οκτωβρίου 2009 Δημοσ. 24 Οκτωβρίου 2009 Έχει φτιάξει κανείς συνάρτηση για να κάνει include αρχεία php? ........ Το παραπάνω παράδειγμα δεν κάνει echo τίποτα. .... Γιατί θέλει να φτιάξεις function να κάνει include; Η εντολή include υπάρχει και λειτουργεί μια χαρά. Τέσπα. Απάντηση στο πρόβλημα σου: Για το index.php > <?php function include_layout ($file){ include($file); //Από δώ έφυγε το 'Path/'. } $a = 666; include_layout('layout.php'); //συμφωνώ για τα single quotes του Μιχάλη8 ?> Το 'Path/'. δημιουργεί πρόβλημα, ΕΚΤΟΣ αν Path (με το πρώτο γράμμα κεφαλαίο) είναι ο υποφάκελος που βρίσκεται το layout.php Για το layout.php > <?php global $a; //kaneis global tin $a echo $a; ?> Αφού καλείς την $a μέσα απο function πρέπει να την δηλώσεις global.
zipos Δημοσ. 25 Οκτωβρίου 2009 Μέλος Δημοσ. 25 Οκτωβρίου 2009 Γιατί θέλει να φτιάξεις function να κάνει include; Η εντολή include υπάρχει και λειτουργεί μια χαρά. Τέσπα. Απάντηση στο πρόβλημα σου: Για το index.php > <?php function include_layout ($file){ include($file); //Από δώ έφυγε το 'Path/'. } $a = 666; include_layout('layout.php'); //συμφωνώ για τα single quotes του Μιχάλη8 ?> Το 'Path/'. δημιουργεί πρόβλημα, ΕΚΤΟΣ αν Path (με το πρώτο γράμμα κεφαλαίο) είναι ο υποφάκελος που βρίσκεται το layout.php Για το layout.php > <?php global $a; //kaneis global tin $a echo $a; ?> Αφού καλείς την $a μέσα απο function πρέπει να την δηλώσεις global. Το Path είναι ένα απόλυτο path για τα includes και το οποίο έχω δηλώσει σαν σταθερά. Άρα δεν έχει σημασία από που τρέχεις τη συνάρτηση. Πράγματι, αν δηλώσεις global την $α δουλεύει σωστά. Άλλα έτσι χάνει την χρησιμότητά της η συνάρτηση, γιατί όλο και κάποια μεταβλητή θα σου ξεφεύγει. Κρίμα. Thanx anyway
isay Δημοσ. 25 Οκτωβρίου 2009 Δημοσ. 25 Οκτωβρίου 2009 Το Path είναι ένα απόλυτο path για τα includes Να προτιμάς τα relative paths. Άμα χρειαστεί να μεταφέρεις φάκελο/αρχείο/σερβερ/κλπ με τα relative είναι πιο εύκολο
zipos Δημοσ. 25 Οκτωβρίου 2009 Μέλος Δημοσ. 25 Οκτωβρίου 2009 Ναι έτσι πίστευα και γω πριν μερικές μέρες. Ότι είναι καλύτερο με relative paths. Αλλά όπως σου είπα, έχοντας ορίσει > defined('DS') ? null : define('DS' , DIRECTORY_SEPARATOR); // Absolute system Path. defined('SITE_ROOT') ? null : define ('SITE_ROOT' , DS.'home'.DS.'user'.DS.'www'); όλα τα includes παίζουν ρολόι χρησιμοποιώντας τις παραπάνω σταθερές. Και όταν με το καλό αλλάξεις σέρβερ ή φάκελο (ακόμα και λειτουργικό), αλλάζοντας την σταθερά SITE_ROOT, τελείωσες.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.