Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67

    Gestione path relativi con php

    Vi spiego il mio problema.

    Sto realizzando un sito web ma sto avendo dei problemi con la gestione degli include e degli url dei file.

    1-)avendo a che fare con molti include con php non posso utilizzare gli url assoluti.

    Allora ho provato con il root del webserver utilizzando la funzione __DIR__ che mi da il path completo della cartella in cui si trova il file su cui sto lavorando. Fin qui tutto bene poi mi sono bloccqto in questa situazione

    1- nella root del mio progetto ho un file config.php in cui tramite una classe definisco alcuni valori tra cui il percorso della cartella di template utilizzando __DIR__."/template/". Ora da header.php che si trova in template voglio richiamare il file style.css nella stessa cartella. Header.php lo includo in config.php quindi provo ad utilizzare __DIR__/template/style.css ma il browser mi punta verso http://sitoweb.com/var/www/project/template/style.css invece che verso style.css.

    So che potrei utilizzare degli url relativi oppure il semplice style.css nel campo href ma vorrei rendere il tutto funzionante anche con path diversi un po' come fa wordpress con la funzione stylesheet_path o un nome simile.


    Qualche idea?

  2. #2
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Leggi questo, può essere d'aiuto

    http://php.net/manual/en/language.co...predefined.php

    E comunque, meglio un semplice link href che complicarsi la vita secondo me...
    Ma se lo fai per protezione...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Originariamente inviato da skjobax
    Leggi questo, può essere d'aiuto

    http://php.net/manual/en/language.co...predefined.php

    E comunque, meglio un semplice link href che complicarsi la vita secondo me...
    Ma se lo fai per protezione...
    Grazio lo avevo già visto ma la mia situazione è un po' strana perchè __DIR__ funziona in un caso ma non in un altro


    nel sorgente html che è stato generato viene indicato questo url /home/pagliasn/public_html/projects/CloudCoding/template/style.css però se ci clicco sopra mi manda a sito.net/home/pagliasn/public_html/projects/CloudCoding/template/style.css il che è sbagliato.

    Ti posto qualche file per capire meglio.

    Nel cartella del progetto ho:

    index.php
    config.php
    /template
    style.css
    header.php


    Ho omesso alcuni file che non dovrebbero interessarci. Allora index.php non fa altro che richiamare config.php che è questo:

    codice:
    <?php
    class CloudCoding{
    	
    	public $project_name = "CloudCoding";
    	public $project_url = "http://localhost/CloudCoding/";
    	
    	public $root;
    	public $template_folder = "/template/";
    	public $pages_folder = "/pages/";
    	public $css_path;
    	
    	public function __construct(){
    		
    		$this->root = dirname(__FILE__);
    		$this->css_path = $this->root.$this->template_folder."style.css";
    		}
    		
    	public function getPage(){
    		
    		include('./config/page-list.php');
    		
    				
    		if(isset($_GET['page'])){
    			
    			$page = $_GET['page'];
    			
    			if(file_exists($this->root.$this->pages_folder.$page.'.php')){
    				
    				$page_title = $page_list[$page]['title'];
    					
    				$title = $page_title." - ".$this->project_name;
    				
    				require($this->root.$this->template_folder."header.php");
    				require($this->root.$this->pages_folder.$page.'.php');
    				require($this->root.$this->template_folder."footer.php");
    			
    				}else{
    				
    					$page_title = $page_list['not-found']['title'];
    					
    					$title = $page_title." - ".$this->project_name;
    				
    					require($this->root.$this->template_folder."header.php");
    					require($this->root.$this->pages_folder.'not-found.php');
    					require($this->root.$this->template_folder."footer.php");
    					}
    					
    				}elseif(!isset($_GET['page'])){
    					
    					$page_title = $page_list['home']['title'];
    					
    					$title = $page_title." - ".$this->project_name;
    				
    					require($this->root.$this->template_folder."header.php");
    					require($this->root.$this->pages_folder.'home.php');
    					require($this->root.$this->template_folder."footer.php");
    					
    					}
    				
    		}
    		
    	}
    	
    	
    ?>

    $root è ottenuto con la funzione __DIR__ poi c'è $css_path che è ottenuto con $root (relativo a config.php) + /template/style.css

    Ora config.php include header.php in /template e da header.php dovrei richiamare style.css che si trova nella stessa cartella ma che invece richiama site.net/root/template/style.css come scritto sopra.

    La cosa strana è che se con lo stesso modo includo un file direttamente da config.php questo viene incluso correttamente come in questo caso:

    Codice:
    $this->root.$this->template_folder."header.php"

  4. #4
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Allora, facciamo chiarezza....
    Un href per mandarti a un'altra pagina di un altro sito richiede http e url.
    __DIR__ non ti genera un url, ma un path che comprende la superdirectory del sito!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Originariamente inviato da skjobax
    Allora, facciamo chiarezza....
    Un href per mandarti a un'altra pagina di un altro sito richiede http e url.
    __DIR__ non ti genera un url, ma un path che comprende la superdirectory del sito!!
    Ho scoperto che con __DIR__ funziona solo l'include mentre con href come hai detto tu no.

    Ora io non vorrei utilizzare gli url assoluti ma quelli relativi però vorrei sapere:

    1-) è possibile utilizzare la superdirectory per creare href? credo di no
    2-) c'è un modo di creare url relativi che funzionino anche cambiando l'albero delle cartelle?

  6. #6
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    1) Infatti non è possibile.
    2) Tu vuoi la directory SUPERIORE a quella dove ti trovi adesso?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Originariamente inviato da skjobax
    1) Infatti non è possibile.
    2) Tu vuoi la directory SUPERIORE a quella dove ti trovi adesso?
    possibilmente tutte le directory superiori... penso che si possa fare con php self eliminando il nome del file giusto?

  8. #8
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Beh dovrebbe funzionare...

    Comunque, se sei nella cartella:
    E la cartella si trova in:
    Allora nell'include metterai (blabla.php):
    Codice PHP:
    <?php
    // ....

    include '../styles/blabla.css';

    // ....
    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.