PHP Tips

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

PHP Tips

Δημοσίευση από mrpc » 11 Οκτ 2011 04:16

Σε όλα τα site για προγραμματιστές είναι δημοφιλή τα άρθρα του τύπου "10 συμβουλές για να κάνετε τον κώδικα σας πιο γρήγορο / πιο ασφαλή" κ.λ.π. Σκέφτηκα να κάνω κάτι τέτοιο για το freestuff, με απλά tips που μπορεί να φανούν χρήσιμα σε κάποιους. Οι παρακάτω συμβουλές έρχονται κυρίως από προσωπική εμπειρία, πιθανόν σε κάποια από αυτά να υπάρχει και αντίλογος, αλλά ακόμα και έτσι μπορεί να γίνουν αφορμή για συζήτηση.

Φυσικά όποιος θέλει συμπληρώνει και άλλες!

1. Πάντα χρησιμοποιούμε τα κανονικά php tags και αποφεύγουμε τις συντομεύσεις:

Τα short tags της PHP (<?) δεν υποστηρίζονται σε όλα τα server configurations. Αν θέλουμε η εφαρμογή μας να παίζει παντού, το καλύτερο που μπορούμε να κάνουμε είναι να χρησιμοποιούμε το κανονικό tag, δηλαδή <?php. Αντίστοιχα, αποφεύγουμε τις συντομεύεσεις όπως <?=$variable;?>, και βάζουμε ολοκληρωμένη την εντολή <?php echo $variable;?>. Εκτός του θέματος της συμβατότητας, με αυτόν τον τρόπο ο κώδικας μας είναι πιο εύκολα κατανοητός.

2. Δεν κλείνουμε τα php tags

Το γνωρίζατε ότι όταν τελειώνει ένα αρχείο, το κλείσιμο της php δεν είναι απαραίτητο; Για την ακρίβεια, είναι καλό να κλείνουμε την php μόνο όταν στο ίδιο αρχείο ακολουθεί html κώδικας.
Με αυτό τον τρόπο διασφαλίζουμε το ότι δεν θα περάσει κάποιο whitespace στο output buffer και θα αποφύγουμε τα κλασικά bugs (headers already sent κλπ).

3. Ποτέ δεν εμπιστευόμαστε τον χρήστη

Αυτή η συμβουλή ταιριάζει για όλες τις γλώσσες προγραμματισμού.
Ότι και να γίνει, ποτέ - ποτέ δεν εμπιστευόμαστε το input των χρηστών. Πάντα ελέγχουμε τα δεδομένα τους, αν ανταποκρίνονται σε αυτό που περιμένουμε, αν είναι ο ίδιος τύπος κ.λ.π. Μέσα από το input των χρηστών μπορούμε να δεχτούμε από injections κάθε είδους (sql,js,css, you name it), μέχρι και απίστευτα λάθη και βλακείες που μπορεί να κρεμάσουν την εφαρμογή μας.
Καλό είναι να ξέρουμε καλά όλες τις λειτουργίες που έχει η ίδια η php για validation (π.χ. is_int, is_bool για έλεγχο τύπου, strip_tags και ανάλογες function για καθάρισμα του input, ===, !==, δηλαδή operators που ελέγχουν και τον τύπο δεδομένων εκτός από το περιεχόμενο), να χρησιμοποιούμε και κάποιες εξωτερικές κλάσεις για αυτή τη δουλειά, ώστε να φιλτράρουμε και πράγματα που δεν έχουν προβλέψει οι δημιουργοί της php.

4. Αναπτύσουμε την εφαρμογή μας προβάλοντας ΟΛΑ τα error/warning/notice

Είναι τραγικό να κάνουμε δοκιμές στον κώδικα μας με κλειστό το error reporting. Ιδανικά πρέπει να βλέπουμε τα πάντα, notices, warnings κ.λ.π. Εκτός από λάθη, θα ανακαλύψουμε και πράγματα που θα μπορούσαν να γίνουν με κάποιον άλλο τρόπο καλύτερα, καθώς η php μας ενημερώνει ακόμα και για functions που σε επόμενες εκδόσεις δεν θα λειτουργούν.
Αν δε θέλουμε να το κάνουμε από το php.ini, μπορούμε απλά να βάλουμε στην αρχή του κώδικά μας ένα:

Κώδικας: Επιλογή όλων

error_reporting&#40;-1&#41;;
ini_set&#40;'display_errors', 1&#41;;
5. χρήση μονών εισαγωγικών - ή έξοδος από τον parser

Ένας τρόπος να γλυτώσουμε μερικά ms από την εκτέλεση του κώδικα μας είναι να προσέχουμε τι βάζουμε την php να κάνει.
Π.χ. το κλασικό παράδειγμα:

Κώδικας: Επιλογή όλων

<?php echo "Hello World";?>
είναι λάθος, γιατί ουσιαστικά αναγκάζουμε τον parser να εξάγει κάτι μη δυναμικό, το οποίο θα μπορούσαμε απλούστατα να το γράψουμε ως

Κώδικας: Επιλογή όλων

Hello World
χωρίς να περάσει από τον php parser.
Αν όμως πρέπει όντως να χρησιμοποιήσουμε την php για να εξάγουμε κάτι, προσέχουμε τα παρακάτω:
α) Η echo είναι πιο γρήγορη από την print
β) τα μονά εισαγωγικά είναι πιο γρήγορα από τα διπλά (αφού δεν χρειάζεται περισσότερο parsing για να βρεθούν μεταβλητές, ειδικοί χαρακτήρες κ.λ.π.)
γ) Η echo δέχεται σύνταξη με κόμματα ( echo $a, $b; ), η οποία είναι πολύ πιο γρήγορη από την κλασική σύνταξη ( echo $a . $b; ), αφού δεν χρειάζεται πρώτα να ενώσει τα περιεχόμενα των μεταβλητών.

6. Δεν χρησιμοποιούμε Regular Expressions αν δεν τις χρειαζόμαστε

Για παράδειγμα, σε πολλές περιπτώσεις, η χρήση της str_replace ή str_ireplace μπορεί να μας καλύπτει και να μην χρειαζόμαστε την preg_replace. Σε τέτοιες περιπτώσεις, οι regular expressions απλά κάνουν τον κώδικά μας πιο αργό.

7. Χρησιμοποιούμε κάποιο coding standard και γράφουμε σωστό documentation του κώδικα μας

Και αυτό είναι κάτι που ισχύει για όλες τις γλώσσες προγραμματισμού.
Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.
Μπορεί ο κώδικας μας να είναι εύκολα κατανοητός τώρα που τον γράφουμε και έχουμε στο μυαλό μας τι ακριβώς κάνει η function "defteriSynartisi" και τι περιέχει η μεταβλητή $koulapolykolopaidookyriakos, όμως αργά ή γρήγορα θα χρειαστεί να ξαναδούμε τον κώδικα μας για να κάνουμε κάποια διόρθωση ή να προσθέσουμε κάποιο feature. Για να μην αναφέρω την περίπτωση να χρειαστεί να δει τον κώδικά μας κάποιος άλλος developer.
Είναι λοιπόν σκόπιμο να γράφουμε καθαρό κώδικα, ακολουθώντας κάποιο coding standard. Δεν έχει σημασία ποιο, αρκεί να είμαστε συνεπείς. Πάντα γράφουμε αναλυτικά σχόλια στις function μας, χρησιμοποιούμε σωστά ονόματα στις μεταβλητές μας και έχουμε πάντα στο μυαλό μας ότι πρέπει να μπορούμε να καταλάβουμε τι συμβαίνει σε κάθε σημείο του κώδικα, ακόμα και μετά από 5 χρόνια. Ο κόπος αυτός πάντα ανταμείβεται.

8. Όταν μπορούμε, κρατάμε τον κώδικα της εφαρμογής μας σε directory που δεν είναι public.

Για παράδειγμα, οι περισσότεροι hosting providers μας δίνουν ένα home directory που περιέχει το subdirectory public_html, και ότι βάλουμε σε αυτό φαίνεται public. Όμως, μέρη του κώδικά μας μπορούν να είναι και έξω από αυτόν τον φάκελο, αρκεί να τα καλέσουμε με μια include. Έτσι μπορούμε να αποθηκεύσουμε με μεγαλύτερη ασφάλεια προσωρινά αρχεία, αρχεία ρυθμίσεων και οτιδήποτε άλλο δεν θέλουμε από κάποιο λάθος να βγει public.

9. Χρησιμοποιούμε absolute paths αντι για relative

Αφ’ ενός βοηθάμε τον server, αφού δεν τον αναγκάζουμε να κάνει resolve τα path για εμάς κάθε φορά που κάνουμε include κάτι. Επίσης, κάτι τέτοιο μπορεί να μας προστατέψει από πιθανά λάθη που θα προκαλούσαν code injection.



Αυτά για την ώρα... Συμπληρώστε από τη δική σας εμπειρία και με άλλες συμβουλές.

Άβαταρ μέλους
nirvana
Δημοσιεύσεις: 241
Εγγραφή: 01 Σεπ 2005 18:28
Τοποθεσία: Αγ. Παρασκευή

PHP Tips

Δημοσίευση από nirvana » 11 Οκτ 2011 11:53

Ωραία tips και που δεν τα διαβάζεις κάθε μέρα.

Ευχαριστουμέ πολύ :)

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

PHP Tips

Δημοσίευση από Rapid-eraser » 11 Οκτ 2011 14:24

Εκτός από το 1) τα υπόλοιπα με βρίσκουν σύμφωνο :)

Αρνούμαι να χρησιμοποιήσω <?php :P το xml μπορεί να μπει και σε quotes αν εκεί είναι το πρόβλημα... από την στιγμή που η γλώσσα σου δίνει την δυνατότητα να παίξεις με sort tags χωρίς να υπάρχει καμία ουσιαστική διαφοροποίηση δεν βλέπω τον λόγο να κατατάσσεται στα tips ...

All in all προτιμώ να γράφω 4 χαρακτήρες για να μπω σε php παρά 7 :P
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

PHP Tips

Δημοσίευση από gvre » 11 Οκτ 2011 15:12

Σχετικά με το 1, το <?= είναι πάντα διαθέσιμο από την php 5.4.0 και μετά, ανεξάρτητα από τη ρύθμιση του short_open_tag (αναφέρεται στο php.ini directives).

Το 5 είχε νόημα παλιότερα. Σε κάτι benchmarks που διάβασα πριν κάμποσο καιρό φαινόταν ότι πλέον δεν έχουν νόημα τέτοιου είδους μικροβελτιστοποιήσεις.

@Rapid-eraser Αν γράφεις εφαρμογή που θα παίξει σε δικό σου server μπορείς να χρησιμοποιείς short tags. Αν δεν ξέρεις που θα παίξει είναι προτιμότερο να χρησιμοποιείς το <?php

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

PHP Tips

Δημοσίευση από mrpc » 11 Οκτ 2011 15:23

@rapid: Ο λόγος που το προτείνω είναι το ότι με το κανονικό tag παίζει σε όλα τα server configuration.
Αν δεν κάνω λάθος, στις προτεινόμενες ρυθμίσεις της php από την έκδοση 5.1 και πάνω, το short_open_tag είναι κλειστό, οπότε ίσως από κάποιο σημείο και πέρα να είναι κλειστό by default. Οπότε από το να κυνηγάς τον administrator να αλλάξει τις ρυθμίσεις, με το ολόκληρο tag είσαι καλυμμένος.
Βέβαια μιλάμε για πολύ κλασικό debate της php, σε άλλα site έχω δει να εξελίσσεται σε flame war :D

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

PHP Tips

Δημοσίευση από Rapid-eraser » 11 Οκτ 2011 15:25

Δεν μου έχει τύχει ποτέ php σε production server που να μην έχει τα short tags ανοικτά ... πιστεύω είμαι αρκετά ασφαλής , εκτός αυτού είναι ένα restart μακριά από το να αποκτήσει :P

Αν το έχει αφήσει έτσι ο admin to πιο πιθανό είναι να μην έχει κάνει καθόλου config και την php πράγμα που είναι ακόμα χειρότερο !!!

Πιο πιθανό είναι να πετύχω server χωρίς mysql παρά τα sort tags off :)
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

PHP Tips

Δημοσίευση από mrpc » 11 Οκτ 2011 15:33

Προσωπική εμπειρία, από εφαρμογή που έδωσα σε κάποιο ελληνικό ίδρυμα το οποίο είχε δικό του datacenter και δικούς του server (pm για λεπτομέρειες): Μετά από αναβάθμιση της php σε νεώτερη έκδοση, ο sysadmin αρνούνταν να στήσει php configuration με short tags γιατί είχε διαβάσει (στις προτεινόμενες ρυθμίσεις) ότι δεν προτείνεται, με αποτέλεσμα η εφαρμογή μου να σκάσει. Μετά από τεράστια προσπάθεια να του εξηγήσω για ποιο λόγο δεν προτείνεται και ότι δεν έχει να κάνει με την ασφάλεια του server (!!!), τελικά απέτυχα, και αναγκάστηκα να μετατρέψω όλα μου τα αρχεία.
Ακραία περίπτωση, αλλά από τότε φυλάω τα ρούχα μου :p :p :D

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

PHP Tips

Δημοσίευση από Rapid-eraser » 11 Οκτ 2011 15:47

Sorry που αδιαφορώ για τον admin του ελληνικού ιδρύματος ... ο οποίος πιθανόν να μην ξέρει και την τύφλα του από production level installations. Όταν αυτός ο admin αποφοιτήσει και βγει σε production ρώτα τον αν θα ξανακάνει αυτή την συζήτηση :)

Με την ίδια λογική αν είχε διαβάσει ότι η php έχει κάποιο σοβαρό security bug μπορεί τώρα να έγραφες την εφαρμογή σου σε aspx ?
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

PHP Tips

Δημοσίευση από mrpc » 11 Οκτ 2011 15:53

Μάλλον θα γυρνούσα ταινία με τη ζωή του admin :p

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

PHP Tips

Δημοσίευση από korgr » 11 Οκτ 2011 17:27

Εγώ θα προσέθετα το να γράφει κάποιος με γνώμονα την επαναχρησιμοποίηση του κώδικα (συνήθως με αντικειμενοστραφή κώδικα)

Άβαταρ μέλους
greekbytes
WebDev Moderator
Δημοσιεύσεις: 2438
Εγγραφή: 15 Νοέμ 2002 15:42
Τοποθεσία: Αθήνα
Επικοινωνία:

PHP Tips

Δημοσίευση από greekbytes » 11 Οκτ 2011 20:16

Ωραίος! Θα συμφωνήσω με τον Rapid που συμφωνεί σε όλα εκτός από τα short tags... :P
Το ότι δεν χρειάζεται να κλείνεις τα php tags δεν το ήξερα άλλα φοβάμαι να το δοκιμάσω χχεχε!

Να γράψω κι εγώ μερικά λοιπόν...

9.1 Χρησιμοποιούμε absolute paths αντι για relative (συνέχεια)

Μπορούμε εύκολα να πάρουμε το absolute path της εφαρμογής μας χρησιμοποιόντας την "Magic constant" __FILE__ σε ένα αρχείο που ούτως ή άλλως κάνουμε include παντού. Παράδειγμα:

Κώδικας: Επιλογή όλων

// Αν το αρχείο που κάνουμε include παντού είναι το config.php και βρίσκεται στο κεντρικό directory της εφαρμογής μας
$absolute_path = dirname&#40;__FILE__&#41;;

// Αν το αρχείο που κάνουμε include παντού βρίσκεται στο system/config.php
$absolute_path = preg_replace&#40;'#/system$#i', '', dirname&#40;__FILE__&#41;&#41;;

10. Multibyte string functions

Εφόσον το project μας είναι σε UTF-8 κωδικοποίηση χρησιμοποιούμε πάντα τις Multibyte string functions της php. Για παράδειγμα, χρησιμοποιούμε την mb_strlen() αντί της strlen() για να βρούμε το string length.


11. Array σαν argument σε function αντί για πολλά arguments

Αν η function μας έχει έχει πάνω από 2-3 arguments και αυτά τείνουν συχνά να αυξάνονται, είναι προτιμότερο να έχουμε 1 array σαν argument.

Για παράδειγμα, αυτή η function:

Κώδικας: Επιλογή όλων

function add_to_log&#40;$msg='', $type='normal', $critical=false, $module, $user&#41;&#123;   

   echo $msg;

   // do stuff here
   return true;
&#125;

// test run
add_to_log&#40;'test message', 'foo', true, 'news', 23&#41;;
Θα μπορούσε να γίνει έτσι:

Κώδικας: Επιλογή όλων

function add_to_log&#40;$data=array&#40;'msg'=>'', 'type'=>'normal', 'critical'=>false, 'module'=>'', 'user'=>''&#41;&#41;&#123;

   if &#40;!is_array&#40;$data&#41;&#41; &#123;	
      return false; 
   &#125;

   print_r&#40;$data&#41;;

   // do stuff here
   return true;
&#125;

// test run
$my_arguments = array&#40;
   'msg'=>'test message', 
   'type'=>'foo', 
   'critical'=>true, 
   'module'=>'news',
   'user'=>23
&#41;;
add_to_log&#40;$my_arguments&#41;;
Με τον τρόπο αυτόν μπορούμε εύκολα αργότερα να προσθέσουμε arguments χωρίς να ανησυχούμε για τη σειρά τους και δεν χρειάζεται να προσέχουμε να αφήνουμε "κενά" αυτά που δε θέλουμε να ορίσουμε.


12. Τσεκάρουμε αν όντως μπορεί η php να γράψει σε ένα αρχείο ή directory με την is_writable()

Πολλές φορές θα ξεχάσουμε να σετάρουμε τα permissions στο directory που ανεβάζουμε εικόνες, ή στο αρχείο που γράφουμε κάποιο RSS, άλλες φορές ο νέος server θα είναι ιδιότροπος και θα θέλει άλλα permissions από αυτά που ήθελε ο παλιός... κλπ κλπ... Οπότε είναι καλή συνήθεια σε κάποιο προστατευμένο αρχείο (π.χ. μέσα στο admin panel) να τσεκάρουμε αν όντως μπορεί η php να γράψει εκεί που πρέπει.

Κώδικας: Επιλογή όλων

if &#40;is_writable&#40;$my_upload_path&#41;&#41;&#123; 
   echo 'All good';
&#125; else &#123;
   echo 'Huston we have a problem';
&#125;
EDIT: ορθογραφικά :P
Τελευταία επεξεργασία από το μέλος greekbytes την 11 Οκτ 2011 20:33, έχει επεξεργασθεί 2 φορές συνολικά.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

PHP Tips

Δημοσίευση από cpulse » 11 Οκτ 2011 20:23

Ωραία πράγματα mrpc. Μια προσωπική άρνηση μόνο στο 2 για το ΜΗ κλείσιμο των tags. Έχω δει σε πολλά sites να λένε γι αυτό, αλλά δεν μ'αρέσει καθόλου η ιδέα.

Το γεγονός οτι το προτείνει το Zend framework ή οτι το υποστηρίζει η PHP για μένα δεν είναι λόγος να το ιυοθετούμε. Η Zend και η PHP έχει κάνει πολλές φορές στο παρελθόν της χαζομάρες που τελικά τις παίρνει πίσω. Πχ. magic quotes, register globals.

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

- Δεν είναι ολοκληρωμένο συντακτικό. Μου κάθεται όσο στραβά θα μου καθόταν κι αν μου λέγαν να μην κλείνω τα curly braces.

- Αν σε μια από αυτές τις σελίδες χρειαστεί κάποιος άσχετος να προσθέσει HTML κώδικα, πολύ πιθανό να το κάνει έτσι χύμα χωρίς να ξέρει από PHP και τέτοια. Το αποτέλεσμα θα είναι το πρόγραμμα να βγάλει parse error. Επακόλουθα 1) Αν έχει display errors να βγάλει ένα λάθος και να μην τρέξει η σελίδα, 2) Αν δεν έχει display errors, να μη μάθει ποτέ τι έγινε. Γενικά αυτή η τεχνική δεν είναι fool proof.

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

PHP Tips

Δημοσίευση από mrpc » 11 Οκτ 2011 20:46

@greekbytes αντί για:

Κώδικας: Επιλογή όλων

$absolute_path = preg_replace&#40;'#/system$#i', '', dirname&#40;__FILE__&#41;&#41;;
μπορείς να γράψεις

Κώδικας: Επιλογή όλων

$absolute_path = dirname&#40;dirname&#40;__FILE__&#41;&#41;;
Επίσης, στα path μας, καλό είναι αντί να χρησιμοποιούμε το "/", να χρησιμοποιούμε το magic constant DIRECTORY_SEPARATOR.
Π.χ., αντί για

Κώδικας: Επιλογή όλων

include $absolute_path . "/includes/file.php";
βάζουμε

Κώδικας: Επιλογή όλων

include $absolute_path . DIRECTORY_SEPARATOR .  "includes" . DIRECTORY_SEPARATOR . "file.php";
Μην ξεχνάμε π.χ. ότι στα windows το directory separator είναι ανάποδο.

Άβαταρ μέλους
greekbytes
WebDev Moderator
Δημοσιεύσεις: 2438
Εγγραφή: 15 Νοέμ 2002 15:42
Τοποθεσία: Αθήνα
Επικοινωνία:

PHP Tips

Δημοσίευση από greekbytes » 11 Οκτ 2011 20:51

mrpc έγραψε:@greekbytes αντί για:

Κώδικας: Επιλογή όλων

$absolute_path = preg_replace&#40;'#/system$#i', '', dirname&#40;__FILE__&#41;&#41;;
μπορείς να γράψεις

Κώδικας: Επιλογή όλων

$absolute_path = dirname&#40;dirname&#40;__FILE__&#41;&#41;;
Σωστός! Τη συγκεκριμένη γραμμή την "κουβαλάω" πολύ καιρό και ποτέ δεν το σκέφτηκα :D

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

PHP Tips

Δημοσίευση από gvre » 12 Οκτ 2011 01:06

mrpc έγραψε: Επίσης, στα path μας, καλό είναι αντί να χρησιμοποιούμε το "/", να χρησιμοποιούμε το magic constant DIRECTORY_SEPARATOR.
Π.χ., αντί για

Κώδικας: Επιλογή όλων

include $absolute_path . "/includes/file.php";
βάζουμε

Κώδικας: Επιλογή όλων

include $absolute_path . DIRECTORY_SEPARATOR .  "includes" . DIRECTORY_SEPARATOR . "file.php";
Μην ξεχνάμε π.χ. ότι στα windows το directory separator είναι ανάποδο.
Το / παίζει και σε windows.

@cpulse Ο άσχετος δεν πρέπει να πειράζει τα αρχεία :) Αν υποθέσουμε ότι τα πειράζει, δεν πρέπει να το κάνει σε production μηχανήματα.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες