include_path ed errori

Endorama

Nuovo Utente
7 Mar 2009
9
0
0
Salve a tutti, sto sviluppando un progettino in php e mysql, una roba abbastanza complicata, e ovviamente mi trovo in panne su una delle cose più semplici: gli include_path di php.
Allora, la struttura del programma, a livello di file system, è questa(quelle tra <> sono cartelle, gli altri file):
<ROOT DIR>
<system>
<bin>
config.php
install.php
uninstall.php

<session>
_sstatus.php
_sopen.php
_sclose.php
_smanager.php
<lib>
_db.php
config.php​
<gui>
index.php​

Ci sono anche un sacco di altre cose che ho omesso. Tutto sto spiegone mi serve per farvi capire la situazione: dalla cartella "gui"(Graphics User Interface), che contiene il sito navigabile, devo rimandarmi alla cartella "bin", dove ci sono gli script per l'esecuzione di tutte le funzioni del programma.

Il precorso è questo: dal file index.php io includo il file ../bin/session/_sstatus.php. A sua volta _sstatus.php include _smanager.php e ../lib/_db.php. A loro volta includono tutti config.php e altri file a seconda del caso specifico.
Il problema si presenta proprio su questi include. Mi compare un bel Warning con scritto che i file inclusi non sono nel path che ho specificato. Gli include li ho specificati tuti usanto path relativi, dal file in cui è inserito l'include, e ho letto che questo può essere un problema, a volte. Quindi ho prevato ad usare un path assoluto del server, e php mi ha candiamente risposto che l'URL file-access è disabilitato. Ho cercato in php.ini e non ho trovato nulla, o meglio, non conosco la proprietà da modificare.

Qualcuno mi sa dare un mano per far funzionare sti diamine di include?

PS: ho cercato già una soluzione negli altri post sul forum, ma quelli che ho letto non mi hanno aiutato...
 
Ultima modifica:
ciao
non sono un espertissimo
da quello che ho capito includi in index.php
../bin/session/_sstatus.php
a sua volta _sstatus.php dovrebbe includere _smanager.php ecc...
una volta incluso _sstatus.php qusti diventa una pagina unica con index quindi per includere qualcosa dovrebbe avere

../bin/session/_manager.php
../bin/lib/_db.php

cioè sempre indicare la cartella bin
 
Ossia devo utilizzare path relativi da primo file da cui faccio l'include.

Ci avevo pensato anche io a questa soluzione, e ovviamente ci proverò, ma il problema è che mi sembra strano come uno strumento potente come l'include sia legato ad una limitazione come questa. Di fatto mi toccherebbe praticamente includere in ogni file tutti quelli che mi servono, indipendentemente dal fatto che questi risultino già inclusi in un'altro file...


Beh, io ci provo così, ma se qualcuno riesce a pescare dal cilindro un'altra soluzione, ne sarei proprio felice!

PS: grazie cmq...speriamo che così vada...
 
...indipendentemente dal fatto che questi risultino già inclusi in un'altro file...
attento sino a che non includi _sstatus.php in index.php ed il bw non richiama index gli altri file non sono inclusi in _ssstatus, vengono inclusi dopo che _ssstatus è stato incluso e l'istruzione include pnicopallo.php è come se fosse una istruzione che hai scritto in index quindi per includere altri file ha bisogno delle path giuste
 
Ok, l'avevo immaginato...adesso però si presenta un problema.

Ossia io in _sstatus.php ho l'istruzione require("../lib/_db.php");, che mi serve per caricare la classe che gestisce la connessione al database.
Questo require è però inserito in una funzione, e lo scope dell'include fa si che se io faccio l'include ad inizio file, nella funzione lui non lo trovi.
(almeno questo è quello che ho capito dopo alcuni problemi che ho avuto)

Quindi che soluzione mi resta? Posso inserire in config.php variabili con path diversi a seconda del punto in cui mi trovo del file system, il che mi sembra però una soluzione piuttosto raffazzonata. Oppure posso usare nell'incude il path assoluto, ma uale proprietà devo modificare perchè php lo abiliti?
E ci sono ripercussioni sulla sicurezza?
 
come accennato non sono espertissimo e non so dirti quale istruzione dare a php.
l'unica cosa che so dirti è che devi provare con le path giuste
se in index.php hai
//....
require_once('../bin/session/_sstatus.php');
//.....

in _sstatus.php dovresti avere

//.....
require_once('../bin/lib/_db.php');
//....
credo inoltre che l'istruzione di inclusione _db, trovandosi dentro una funzione, non venga eseguita sino a che la funzione non venga richiamata
anche dal punto di vista della sicurezza non so dirti esattamente, l'unica cosa che so è che php non è facilmente leggibile (es dal bw con vedi html)
 
se in index.php hai
//....
require_once('../bin/session/_sstatus.php');
//.....

in _sstatus.php dovresti avere

//.....
require_once('../bin/lib/_db.php');
//....

beh, allora la concludo così: creo 2 variabili generali in config.php che gestiscano l'include a seconda del path che richiama lo specifico file, facendo una cosa tipo
PHP:
if ( $DALLA_STESSA_CARTELLA )
     include("../lib/_db.php")
else
     include("../bin/lib/_db.php")

Spero che una roba simile, anche se rozza, funzioni...

faccio sapere i risultati...
grazie a tutti!
 

Discussioni simili