Πρόβλημα με PHP include και φακέλους...

PHP, ASP, Javascript, MySQL, WordPress, Joomla, phpBB, OpenSource λογισμικό.

Πρόβλημα με PHP include και φακέλους...

Δημοσίευσηαπό D.max » 17.03.09, 5:43 pm

Καλησπέρα.
Προσπαθώ να δημιουργήσω μια δυναμική ιστοσελίδα με την μέθοδο "include". Δουλεύω localhost με MAMP virtual server. Οι γνώσεις μου στην PHP είναι ελάχιστες.

Η δομή της σελίδας έχει ως εξής:

Στο φάκελο (htdocs) βρίσκεται ο φάκελος της ιστοσελίδας (mysite).
Tο (mysite) εμπεριέχει:
Την index.php η οποία εκτελεί τα "include".
1ο φάκελο (inc) με τα επιμέρους αρχεία header.php, menu.php, sidebar.php, footer.php και συνοδευτικό φάκελο (images) με jpg, png κλπ τα οποία είναι αναπόσπαστα αρχεία τα άνω.
2ο φάκελο (2009) του mainContent με τα αρχεία feb.php και συνοδευτικό φάκελο (photos) με jpg, png κλπ τα οποία είναι αναπόσπαστα αρχεία του άνω.
3ο φάκελο (css) με το css της index.php.

Σημείωση: Τα .php αρχεία των φακέλων δεν εμπεριέχουν τα:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<body>
</body>
</html>
είναι σκέτα κείμενα με τις ανάλογες εικόνες τους.

Ο κώδικας:

<body class="thrColHybHdr">

<div id="container">
<div id="header">
<?php include ("inc/header.php"); ?>
</div>
<div id="sidebar1">
<?php include ("inc/menu.php"); ?>
</div>
<div id="sidebar2">
<?php include ("inc/sidebar2.php"); ?>
</div>
<div id="mainContent">
<?php include ("2009/feb.php"); ?>
</div>
<div id="footer">
<?php include ("inc/footer.php"); ?>
</div>
</div>

Το πρόβλημα:
Κάνοντας preview την index.php σε οποιωνδήποτε browser, μου εμφανίζονται τα κείμενα και τα links κανονικά, αλλά οι εικόνες είναι broken links. http://localhost:8888/mysite/index.php
Ανοίγοντας τα broken links (του header π.χ.) σε νέο παράθυρο η διεύθυνση έχει ως εξής: http://localhost:8888/mysite/logo.png
Κάνοντας όμως preview για έλεγχο τα επιμέρους αρχεία php, οι εικόνες είναι στη θέση τους.

Έχω δοκιμάσει με <?php include($serverRoot . "inc/header.php"); ?> και <?php include ($_SERVER['DOCUMENT_ROOT'] ."inc/header.php"); ?> αλλά τίποτα.

Τι χρειάζεται στον κώδικα για να λειτουργήσει σωστά;
D.max
Member
 
Posts: 8
Εγγραφή: 31.03.06, 3:04 pm
Τοποθεσία: Καρπενήσι

Re: Πρόβλημα με PHP include και φακέλους...

Δημοσίευσηαπό notis » 17.03.09, 9:35 pm

Εχεις πεσει θυμα του κλασσικου λαθους του include...
Οταν εχεις ενα include file οσα paths εχει μεσα (πχ εικονες) θα πρεπει να τα οριζεις σαν να ηταν μεσα στο root (index.php)

Για παραδειγμα στο feb.php πρεπει να αναφερεσαι στο image ως εξης: "2009/photos/image.jpg"
Άβαταρ μέλους
notis
Master Admin
 
Posts: 3697
Εγγραφή: 23.02.04, 1:36 pm
Τοποθεσία: Corinth

Re: Πρόβλημα με PHP include και φακέλους...

Δημοσίευσηαπό D.max » 17.03.09, 10:47 pm

notis έγραψε:Εχεις πεσει θυμα του κλασσικου λαθους του include...

Όπως λέμε "includeόπληκτος" :wall
Φίλε noti πίστεψέ με, έχω τρία μερόνυχτα που ψάχνω στα ξένα φόρα για λύση και δεν την έβρισκα. :shock:

Σε ευχαριστώ πολύ.
D.max
Member
 
Posts: 8
Εγγραφή: 31.03.06, 3:04 pm
Τοποθεσία: Καρπενήσι

Re: Πρόβλημα με PHP include και φακέλους...

Δημοσίευσηαπό notis » 17.03.09, 11:41 pm

Ελπιζω να καταλαβες και την λογικη.
Τα περιεχομενα ενος include file γινονται τμημα του κωδικα του index.php (οπου index το καθε file που καλει τα includes).
Οποτε ο καλυτερος τροπος ειναι να γραφεις τον κωδικα μεσα πχ στο index.php και μετα να κανεις cut τα blocks του κωδικα και paste στα νεα αρχεια των includes.
Απλα να δημιουργεις πρωτα τους φακελους και τα εξαρτώμενα files σου (images, css, js κλπ) ωστε να κρατας τα ιδια paths.
Άβαταρ μέλους
notis
Master Admin
 
Posts: 3697
Εγγραφή: 23.02.04, 1:36 pm
Τοποθεσία: Corinth

Re: Πρόβλημα με PHP include και φακέλους...

Δημοσίευσηαπό D.max » 18.03.09, 12:17 pm

notis με κάλυψες πλήρως.

Αρχικά, ακούγεται παράλογο το path των include, αλλά έχει τη λογική του, την οποία κατανόησα χάρη στη δική σου συμβουλή.

Σ' ευχαριστώ και πάλι.
D.max
Member
 
Posts: 8
Εγγραφή: 31.03.06, 3:04 pm
Τοποθεσία: Καρπενήσι

Re: Πρόβλημα με PHP include και φακέλους...

Δημοσίευσηαπό D.max » 28.03.09, 6:36 pm

Δριμύτερος και πάλι με σκάλωμα σε "δυναμικό title κ.λ.π.".
:think
Στην προεπισκόπηση της index.php
Κώδικας: Επιλογή όλων
    <?php include ("header.php"); ?>
</head>
<body class="twoColFixRtHdr">

<div id="container">
  <div id="logo">
    <?php include ("logo.php"); ?>
  </div>
  <div id="menu">
    <?php include ("menu.html"); ?>
  </div>
  <div id="sidebar1">
    <?php include ("news.php"); ?>
    </div>
  <div id="mainContent">
    <?php

if (isset($_GET['pg']) && $_GET['pg'] != "") {

$pg = $_GET['pg'];

if (file_exists(''.$pg.'.php')) {

@include (''.$pg.'.php');

} elseif (!file_exists('new/'.$pg.'.php')) {

echo 'Η σελίδα δεν λειτουργεί προσωρινά';

}

} else {

@include ('main.php');

}

?>
   </div>
   <br class="clearfloat" />
  <div id="footer">
  <?php include ("footer.php"); ?>
    </div>
 </div>
</body>
</html>
μου παρουσιάζεται το εξής πρόβλημα: Δεν δουλεύουν δυναμικά τα <title></title> και <meta tags /> .
Στην header.php χρησιμοποιώ το εξής script:
Κώδικας: Επιλογή όλων
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php if(isset($title)) { print $title; } else { print "Default title goes here"; } ?></title>
<meta name="keywords" content="<?php if(isset($keywords)) { print $keywords; } else { print "keyword1,keyword2,keyword3,"; } ?>" />
<meta name="description" content="<?php if(isset($description)) { print $description; } else { print "Default description tag goes here."; } ?>" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="css/panev.css" rel="stylesheet" type="text/css" media="all" />
και στις σελίδες του "mainContent" π.χ. της main.php ετούτο:
Κώδικας: Επιλογή όλων
<?php

$title = "Ιστοσελίδα.";
$keywords = "διαδίτυο, σερφάρισμα, ενημέρωση.";
$description = "Η ιστοσελίδα μου.";
require_once("header.php");

?>
      
<h1>ΚΕΙΜΕΝΟ</h1>
<div align="justify">Μπλα, μπλα. μπλα, μπλα κ.ο.κ. </div>
Καταλαβαίνω ότι ουσιαστικά, η header.php καλείται δύο φορές, μία από την index.php (include) και μία από την main.php (require_once) του παραδείγματος. Δεν γνωρίζω αν αυτό επηρεάζει την ορθή προβολή του πηγαίου κώδικα.
Μήπως η ταξινόμηση της index.php θέλει αλλαγή, μήπως η αρχειονόμηση του γενικού στησίματος;
Τι φταίει;
Θα εκτιμούσα την βοήθειά σας.
D.max
Member
 
Posts: 8
Εγγραφή: 31.03.06, 3:04 pm
Τοποθεσία: Καρπενήσι

Re: Πρόβλημα με PHP include και φακέλους...

Δημοσίευσηαπό D.max » 30.03.09, 11:23 pm

Μετά από :wallκατάφερα να λύσω τον γρίφο.:superman:
Πραγματικός λαβύρινθος.
D.max
Member
 
Posts: 8
Εγγραφή: 31.03.06, 3:04 pm
Τοποθεσία: Καρπενήσι

Re: Πρόβλημα με PHP include και φακέλους...

Δημοσίευσηαπό cpulse » 03.04.09, 7:38 pm

Γενικά να προτιμάς τα require() αντί τα inlcude(). Η διαφορά αυτών των δύο είναι οτι αν το αρχείο που καλούνε δεν υπάρχει, το include() βγάζει ένα warning ενώ το require() σταματάει την ροή της εφαρμογής. Σε αρκετούς production servers τα warnings είναι ρυθμισμένα να μην εμφανίζονται για λόγους ασφαλείας οπότε έτσι ποτέ δεν θα μάθεις οτι υπάρχει πρόβλημα. Με την require() το πρόγραμμα δεν δουλεύει και σε αναγκάζει να το φτιάξεις.

Επίσης με relative paths (αυτά που χρησιμοποιείς) αν το αρχείο δεν βρεθεί στην θέση που το ψάχνεις το σύστημα το ψάχνει και μέσα στα include paths της PHP. Εγώ για να το αποφύγω αυτό χρησιμοποιώ πάλι relative paths αλλά αρχίζοντας απο το current directory.

Δηλαδή αντί να γράψω require('file.php'); γράφω require('./file.php');
/* code == fun */
Άβαταρ μέλους
cpulse
Senior Member
 
Posts: 848
Εγγραφή: 03.04.06, 11:42 pm


Επιστροφή στο II.III Προγραμματισμός + Τεχνολογία ανοιχτού κώδικα

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

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

Visual Communication Designers Club

Το Visual Communication Designers Club, το μεγαλύτερο Ελληνικό online design forum, αποτελεί μια Ελληνική κοινότητα σχεδιαστών οπτικής επικοινωνίας, υπό την ευρύτερη έννοια του όρου, θέλοντας να συμπεριλάβει στα μέλη της κάθε ειδικότητα και βαθμίδα όσων σπουδάζουν ή εργάζονται στον χώρο της επικοινωνίας, έντυπης, διαδικτυακής, τρισδιάστατης ή εφαρμογών πολυμέσων