Newsgroup: it.comp.www.php
Titolo: caricare file

Nella cartella radice del mio sito ho un file menu.php che viene 
caricato nelle varie pagine pure loro nella radice del sito:
Le pagine contengono questa riga che carica menu.php:
<?php include('menu.php'); ?>
 
Tutto funziona, ma ora vorrei spostare le pagine in 
miosito.it/pagine/
 
lasciando il file menu.php nella radice, ma purtroppo non viene 
caricato.
 
Anche modificando il percorso in:
<?php include('/menu.php'); ?> oppure:
<?php include('
www.miosito.it/menu.php'
); ?> il file non viene 
caricato.
Mi sembrava una modifca abbastanza banale ma mi sfugge qualcosa. Dove 
sto sbagliando?
Grazie
 
-- 
Greg

 ha scritto:

Provato con:
 
<?php include('./menu.php'); ?>
 
 


Provato adesso, anche se non ne capisco la logica, ma non va ancora :(
 
-- 
Greg

 Provato adesso, anche se non ne capisco la logica, ma non va ancora :(
 
Provato anche cosi:
<base href="
http://www.miosito.it/
">
<?php include('menu.php'); ?>
 
La cosa che noto è che non funziona solo l'include php, perchè se provo 
a linkare un'immagine viene regolarmete visualizzata.
 
-- 
Greg


Vado avanti nelle prove e tolgo l'include del tutto, mi limito a 
visualizzare un testo:
<p>prova1</p>
<?php echo "prova2"; ?>
 
E mi stampa a video solo prova1 e non prova2
Possibile che il php sia stato configurato per funzionare solo su 
pagine collocate nella cartella principale? Altrimenti non so più cosa 
pensre o quali altri costrutti provare :(
 
-- 
Greg

 <?php include('
www.miosito.it/menu.php'
); ?> il file non viene caricato.
 
prova <?php include('../menu.php'); ?>
 
 
-- 
Fri(END), Boyfri(END), Girlfri(END), Bestfri(END). Everything has an END 
except...Fam(ILY)! It Has 3 Letters that say I LOVE YOU

 sto sbagliando?
 
Nel non aver letto la documentazione di include() che è la fonte più 
adatta a spiegarti (circa) come funziona.
 
Non confondere PHP con HTML solo perché lo usi per creare una pagina 
HTML, PHP vive sul server, HTML "vive" nel client.
 
-- 
Andrea
 

 prova <?php include('../menu.php'); ?>
 
Cosi funziona, grazie. I 2 puntini assomigliano molto al dos e avrei 
potuto arrivarci, ma perchè non funziona con un percorso assoluto?
E nel caso i file si trovi una cartella sotto come bsigona 
indicarglielo?
 
-- 
Greg


io non sono la persona più indicata per dare consigli, dato che sono un 
"praticone", nel caso dei "puntini" lo sapevo perchè ci ho perso del 
tempo pure io, e alla fine ho trovato googlando la soluzione.
 
In altri casi, immagino che basti inserire il path assoluto, tipo 
/home/pippo/file/quassicosa/, ma lascio la palla a chi è capace :-)


 /home/pippo/file/quassicosa/, ma lascio la palla a chi è capace :-)
 
E' qui la cosa strana, ho provato il path assoluto come prima cosa, ma 
non funziona, esattamente questo:
<?php include('
www.miosito.it/menu.php'
); ?>
è un percorso assoluto, raggiungible da qualsiasi punto senza alcuna 
ambiguità ma non viene visto. E per me è un mistero, anche se continuo 
a googlare, mi piace capire e potrebbe servire in futuro.
Granzie ancora in ogni caso :)
 
-- 
Greg

 <?php include('
www.miosito.it/menu.php'
); ?>
 
ehm no, questo non è un path assoluto, io penso che include vada a 
"pescare" direttamente nel filesystem, quindi devi usare un path come se 
scrivessu sulla cli del PC, quindi /home/miosito/immagini/ potrebbe 
essere un percorso valido.


 valido.
 
Hai ragione, in php, essendo un linguaggio server side la parola 
assoluto parte dal server.
 
E quindi cercando ho trovato questo:
- per sapere il per percorso assoluto della radice del mio sito ci 
vuole una funzione:
<?php
$path = getcwd();
echo "percorso: ";
echo $path;
?>
 
- una volta saputa la root, che cambia in base all'host, nel mio caso 
altervista, tanto per capirsi é: '/membri/miosito/'
 
- quindi il percoso assoluto del mio file, se voglio usarlo ovurnque, 
diventa:  <?php include '/membri/miosito/menu.php'; ?>
 
Credo che rinuncerò all'idea di tenere un poco di ordine archiviando le 
pagine in cartelle coerenti e metterò ogni risorsa nella radice.
Ci sarà un poco di caos ma tutto funzionerà in modo trasparente.
 
-- 
Greg

 pagine in cartelle coerenti e metterň ogni risorsa nella radice.
 
E il diavolo riposa sorridente nella sua casetta di marzapane giů agli inferi.
 
Poi, oh, se le tue "risorse" sono tre file PHP magari va anche bene, ma 
non č un approccio che scala bene.
Tra l'altro che problema c'č a chiamare getcwd()? Lo puoi fare una 
tantum per hosting, in fase di setup, e impostare una variabile in un 
file di configurazione come fanno tanti progetti.
 
-- 
Andrea
 

 configurazione come fanno tanti progetti.
 
Può darsi tu abbia ragione, ma ho provato quel percorso superassoluto 
in uttte le salse, e quando pagine e risorsa sono nella stessa cartella 
fallisce. Fallisce ancora. Può darsi che abbia sbagliato io qualcosa 
per stanchezza, ma in ogni caso ad un certo punto bisogna decidere cosa 
fare per andare avanti
 
-- 
Greg

 tutto il resto sono consigli dati alla cieca.
 
-- 
Andrea
 

 tutto il resto sono consigli dati alla cieca.
 
Tutto quello che vedi intorno a te è polvere di stelle, letteralmente! 
Polvere di stelle!
 
-- 
Greg


Perché servono due puntini: '../menu.php'
 
In generale devi capire come funzionano i path relativi. Dur punti 
significano "vai su di una cartella". Il singolo punto significa "nella 
cartella corrente".
 
Bye.


la cosa più portatile è usare:
include (dirname(dirname(__FILE__)).'/menu.php');
 
perché il path è relativo al primo file che viene eseguito e se per caso 
le pagine venissero richiamate da un index.php presente nella root (*) 
il percorso relativo non funge.
 
(*) es. in root/index.php c'è la gestione delle pagine ed è presente 
include('pagine/pag1.php')

 percorso relativo non funge.
 
E infatti ci ero già sbattuto!
Tuttavia una funzione nidifcata è la prima volta che mi capita di 
vedere, intendo 2 volte la stessa funzione. E faccio pre fatica a 
leggerla, mi aspetterei di vedere 2 volte la menu.php. Mi riprometto di 
approfondire.
 
Percorso assoluto:
Siccome la posizione di menu.php è fissa e nota ( 
/membri/miosito/menu.php ) non dovrebbe questo percorso funzionare da 
qualsiasi pagina venga chiamato?
 
Intanto grazie :)
 
-- 
Greg

 approfondire.
 
Concordo che diventa poco leggibile già dal secondo livello. Io uso una 
combinazione:
 
include( realpath(__DIR__ . '/../menu.php') );
 
Tendo a usare sempre realpath per normalizzare i path e intercettare 
meglio gli errori, ma non è strettamente necessaria. :)
 
__DIR__ è una scorciatoia per dirname(__FILE__)
 
Per essere completamente portabile dovresti usare DIRECTORY_SEPARATOR al 
posto di /
 
include( 
  realpath(
    __DIR__ . 
    DIRECTORY_SEPARATOR .
    '..' . 
    DIRECTORY_SEPARATOR .
    'menu.php'
  )
);
 
Ma diventa presto illeggibile, quindi, IMHO, F*ck Windows. :)
In realtà PHP in questo caso lo converte da solo, ma solo per dire della 
malattia mentale di Microsoft... 
 
Bye.

 Ma diventa presto illeggibile, quindi, IMHO, F*ck Windows. :)
 
Ma infatti è "/", lo slash, il carattere *universale* per separare le dir
di un path nel 99.98% dei server su Internet (e non solo). Qualsiasi altro
carattere è non standard e va quindi abolito e bandito ;-D
 
 

 carattere è non standard e va quindi abolito e bandito ;-D
 
E si, proprio cosi.
Contiuando a pensarci, ad una tantum, avendo un path certo e assoluto 
lo potrei trasformare in costante e passare questa all'include.
Se questa costante sta sopra tutto e tutti non ci dovrebbero esswere 
problemi a chiamarla nè da index nè da qualsiasi altra pagina.
Alla fine è un problema di scope e sintassi che osservo per la prima 
volta
 
-- 
Greg

Dopo dura riflessione, Greg ha scritto :

Arrivo tardi con un commento, spero ti serva. :)
Direi che hai bisogno di defnire una cartella di riferimento e poi 
partire sempre da lì per i percorsi.
Ad esempio se sei nalla radice del sito, hai
/*	Cartella iniziale */
	define('RADICE', __DIR__);
 e poi
include RADICE . '/cart/cart1/class.qualcosa.php';
 
Se sei più nidificato, tipo /uno//due/file.php
allora hai:
define('RADICE', substr(__DIR__, 0, strripos(substr(__DIR__, 0, 
strripos(__DIR__, DIRECTORY_SEPARATOR)), DIRECTORY_SEPARATOR)));
e poi:
include RADICE . '/cart/class.qualcosaltro.php';
 
Un po' macvchinoso ma facile da usare
Ciao.
 
-- 
Alex
 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---

 Ciao.
 
Si, molto macchinoso.
Io ho un astruttura molto semplice:
 
sito/menu.php
sito/index.php
sito/2014/pag1.php
sito/2014/pag2.php
sito/2015/pag1.php
sito/2015/pag2.php
 
In ogni pagina compreso la index vorrei includere la pagina menu,
Una vota saputo il percorso assoluto con una funzione php, che è:
'/membri/miosito/' e a questo ci accodo il mio file menu.php, per cui 
il nuovo path assoluto diventa: /membri/miosito/menu.php non capisco 
perchè questo non sia visibile da tutte le pagine.
 
-- 
Greg

 questo non sia visibile da tutte le pagine.
 
La struttura del mio è praticamente uguale, (si parla se non erro di 
altervista?) ed è così:
 
nella root il file index.php e vari altri file *.php  (nav.php, 
header.php, footer.php ecc. ecc.) più alcune directory (immagini, 
tutorials, demo ecc. ecc.)
 
nella directory demo oltre al resto ho un index.php, che include parte 
dei file presenti nella root, gli include sono questi:
 
<?php include("../header.php"); ?>
<?php include("../nav.php"); ?>
<?php include("../footer.php"); ?>
 
in demo/coulisse/ gli include diventano così:
 
<?php include("../../header.php"); ?>
 
e così via, e tutto funziona regolarmente.
Io ripeto, non sono una cima e vado avanti più a tentativi che a 
ragionamento, e i miei "lavori" sono quello che sono, ma mi accontento 
dato che per me è un passatempo e do una mano a degli amici che ne sanno 
meno di me :-D


 questo non sia visibile da tutte le pagine.
 
Mah,
'/membri/miosito/' risultava anche a me, tempo fa, però ho provato 
adesso a trovare il DOCUMENT_ROOT e mi risulta modificato.
Eseguendo:
<?php
echo $_SERVER['DOCUMENT_ROOT'];exit();
 
Se ne esce:
'/var/www/html'
 
Una cosa più simile alle strutture conosciute.
 
Quindi immagino che abbiano fatto delle modifiche profonde alla 
struttura del loro server e ti conviene seguire uno dei sistemi 
macchinosi (ovvero definire una cartella di riferimento) che ti sono 
stai proposti.
 
Ciao


 Ciao
 
Con questa funzione:
 
<?php
$path = getcwd();
echo "percorso: ";
echo $path;
?>
 
eseguita qualche giorno fa mi dava /membri/miosito
ma magari avranno cambiato
 
-- 
Greg

 ma magari avranno cambiato
 
Facciamo con calma. getcwd non è DOCUMENT_ROOT.
E' passato diverso tempo da quando ci ho lavorato sopra.
Mi ricordo che sono rimasto sorpreso che non ci fosse continuità tra la 
DOCUMENT_ROOT impostata tra le variabili ambiente del server e 
/membri/sito/ che si trova dopo.  C'è un salto in effetti, 
probabilmente per ragioni di sicurezza, però ho perso altro tempo per 
venirne a capo.
 
Quello che ha funzionato e funziona è proprio conservare il percorso 
della radice del sito e poi iniziare da quello tutti gli altri.
Sulla falsariga di joomla e di quasi tutti, peraltro.
 
Se ti trovi dentro un comune virtual host, il DOCUMENT_ROOT è 
perfettamente sufficiente. Siccome spesso non sai dove sei e quanti 
giri fa una chiamata al server prima di essere servita, oltretutto qui 
si parla di un terzo livello, impostarsi un riferimento è la cosa più 
semplice, anche mentalmente, perché quando scrivi un percorso non devi
più fare attenzione a dove sei.


Tieni conto inoltre che potresti aver bisogno di registrare i persorsi 
du un database. avere la registrazione senza puntini, doppi o semplici 
che siano, senza cose varie aggiunte, è una cosa che ti trovi ben 
fatyta quando vai a metterci le mani sopra di nuovo.


 ma magari avranno cambiato
 
usando il sistema proposto da Alex ottengo:
 
echo $_SERVER['DOCUMENT_ROOT'];exit();
percorso: /var/www/html
 
con il tuo sistema invece ottengo:
 
$path = getcwd();
echo "percorso: ";
echo $path;
percorso: /membri/miosito
 
ovviamente sul medesimo dominio :-)
Il perchè del diverso comportamento non lo so, ma immagino che il primo 
mostri la root del webserver (terminologia forse inappropriata, ma 
abbiate pietà...), ed il secondo la directory dove si trovano i file 
php|html. In pratica sono 2 funzioni simili ma diverse :-)


 pratica sono 2 funzioni simili ma diverse :-)
 
Io ragiono in dos e sono abbastanza perplesso.
Se siamo in c:\pippo\
per quale diavolo di motivo c:\pippo\menu.php  non dovrebbe essere 
visibile e non ambiguo in c:\pippo\ e in c:\pippo\negozio\
 
Io questo non lo capisco!
 
-- 
Greg

 visibile e non ambiguo in c:\pippo\ e in c:\pippo\negozio\
 
Perché non sei in C:/pippo
 
Nel campo web c'è il concetto di URI (o di URL, che è un sotto-insieme).
Uno URI identifica univocamente una risorsa in un server web, non in un 
disco.
 
Per "comodità" per anni si è mappato uno URI su un filesystem, quindi se 
veniva esposto c:\pippo\miosito come 
http://www.mysite.com/
 tutto quello 
che veniva attaccato al secondo veniva attaccato anche al primo, quindi 
http://www.mysite.com/pluto/paperino.html
 era mappato su c:\pippo\miosito
\pluto\paperino.html
 
Il "problema" è che si è voluto usare la stessa analogia anche per i path 
relativi, quindi .. funziona anche sul web, e la gente pensa che http://
www.mysite.com/../sodoma.html
 sia mappato su c:\pippo\sodoma.html
 
E invece non lo è.
 
PHP, per necessità, è costretto a ragionare in entrambi i modi, quindi 
quando accedi al disco devi pensare in modo "DOS", mentre quando accedi a 
URI devi pensare in modo "Web". Non lo fa lui per te. Devi farlo tu. La 
"root" del sito non è la "root" del filesystem. Sono concetti diversi che 
devi imparare a capire.
 
Bye.

 Bye.
 
Guarda,ho letto attentamente, ma non ho ancora capito come mappa php.
E introduciamo un termine nuovo.
A me pare pacifico che se metto un file nella root del sito questo sia 
visibile nella prima sottocartella del sito, senza ricorrere a 
ocstrutti strani. In particolare, cosa mi devo leggere/studiare?
 
-- 
Greg

 In particolare, cosa mi devo leggere/studiare?
 
Come funziona un server web, direi. Non il dettaglio 
dell'implementazione ma solo a grandi linee come funziona la 
comunicazione con i client.
 
Inoltre c'è anche il fatto che la cwd restituita da getcwd() potrebbe 
essere quella del processo e non quella dello script che viene 
eseguito, per esempio leggo che PHP la tratta diversamente se gira in 
un server web o in CLI.
 
 
-- 
Andrea
 

 leggo che PHP la tratta diversamente se gira in un server web o in CLI.
 
Altre complicazioni.
per adesso lascio tutto su un livello, qui pare non ciano problemi
 
-- 
Greg

 per adesso lascio tutto su un livello, qui pare non ciano problemi
 
Buona camicia a tutti.
 
-- 
Andrea
 

Se Greg vuole raggiungere un file tramite include non ha bisogno di conoscere né un server web né il protocollo http perché le stesse problematiche le avrebbe in qualsiasi linguaggio tra cui lo stesso php via cli.
 
Forse dovrebbe semplicemente scoprire il concetto di path.
 
Visto che però il thread si è un tantinello sfaldato (sarebbe meglio dire che non sono riuscito a stargli dietro) potrebbe darsi che abbia perso il soggetto della questione.

 Forse dovrebbe semplicemente scoprire il concetto di path.
 
E di path relativo, soprattutto.
 
 

Il 17/01/16 13:34:50 ciccio ha scritto:

Una pagina dove è spiegato bene? quelle che ho trovato non mi sono 
servite :(
 
-- 
Greg

 ha scritto:

Sicuro che non hai trovato nulla di utile? No perché
basta una ricerchina ed escono una valangata di info:
 
http://lmgtfy.com/?q=path+relativo+sito+web
 
 
 
 

 Forse dovrebbe semplicemente scoprire il concetto di path.
 
Il problema qua è che l'OP confondeva il path di un URI con il path di 
un filesystem. Sempre path è ma cambia molto secondo il contesto.
 
 
Tutto rigorosamente IMHO.
 
-- 
Andrea
 

 
http://lmgtfy.com/?q=path+relativo+sito+web
 
 
grazie, senza "sito web" ottenevo altro, in ogni caso forse ero che mi 
aspettavo di trovare altro.
 
-- 
Greg