[risolto] php include
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
[risolto] php include
c'è un modo per verificare se il file filename verrà effettivamente incluso
ovvero
include filename; dunzionerà ?
tute le funzioni di controllo file es file_exists(),is_file,is_readable() .. non sono adeguate
vogliono il path
include cerca il file nel path corrente e nell'include path
l'unico modo che ho trovato è di controllare manualmente esplodendo get_include_path()
non è molto comodo
ovvero
include filename; dunzionerà ?
tute le funzioni di controllo file es file_exists(),is_file,is_readable() .. non sono adeguate
vogliono il path
include cerca il file nel path corrente e nell'include path
l'unico modo che ho trovato è di controllare manualmente esplodendo get_include_path()
non è molto comodo
Ultima modifica di eaghezzi il domenica 24 maggio 2015, 16:43, modificato 1 volta in totale.
- crap0101
- Rampante Reduce

- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: php include
ci sarebbe http://php.net/manual/en/function.get-i ... -files.php
un pò più comoda, ma forse non ti cambia così tanto.
un pò più comoda, ma forse non ti cambia così tanto.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php include
purtroppo se include non trova il file genera un warning , try/catch non l'ho intercetta
l'unico modo è di sopprimere l'errore con @include e poi controllare se file è nell'elenco di quelli inclusi
non so qual'è +brutto
l'unico modo è di sopprimere l'errore con @include e poi controllare se file è nell'elenco di quelli inclusi
non so qual'è +brutto
Re: php include
Partendo dal presupposto che non si dovrebbe mai affidare la logica applicativa agli include e che, per questo motivo, si dovrebbe sapere sempre esattamente dove si trova un file che si include il problema non è in come fare quello che vuoi fare ma proprio nell'approccio che stai tenendo.
Nel 2015 vedere applicazioni affidarsi ad "include dinamici" dovrebbe far venire il mal di pancia.
Suggerisco molto caldamente di affidarsi ad approcci ben piu' ortodossi come l'utilizzo dell'autoload e degli standard PSR-X, almeno almeno PSR-1.
Per rispondere alla domanda comunque:
Nel 2015 vedere applicazioni affidarsi ad "include dinamici" dovrebbe far venire il mal di pancia.
Suggerisco molto caldamente di affidarsi ad approcci ben piu' ortodossi come l'utilizzo dell'autoload e degli standard PSR-X, almeno almeno PSR-1.
Per rispondere alla domanda comunque:
Codice: Seleziona tutto
$included = @include('quello che vuoi');
if( $included ){
echo "File included correctly!";
}else{
echo "File inclusion FAILED!";
}Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: php include
composer e' un manager delle dipendenze molto affidabile. https://getcomposer.org/
automaticamente provvede a caricarti le classi che sono dichiarate negli autoload.
automaticamente provvede a caricarti le classi che sono dichiarate negli autoload.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php include
Avete ragione infatti è così le app utilizzano sia PSR-X che composer sono così organizzate
.../.../public/ virtual document root index.php js css html files 'pubblici'
.../.../src/ sorgenti,namespaces e lib terze parti
vendor
namespace(a,b,c)
ed utilizzano l'autoloading
il problema nasce proprio qui
sulle diverse macchine dove vengono installate le app server di sviluppo,...di produzione ....
c'è la necessità di utilizzare un name space che contiene diverse classi di helper
che è posizionato ogni volta in una dir diversa fuori dal tree dell'app
le uniche info che posso usare sono il path_to_ext_lib ed il nome del namespace
volendo generalizzare pensavo di fare così:
e cmq controllare prima le require
.../.../public/ virtual document root index.php js css html files 'pubblici'
.../.../src/ sorgenti,namespaces e lib terze parti
vendor
namespace(a,b,c)
ed utilizzano l'autoloading
il problema nasce proprio qui
sulle diverse macchine dove vengono installate le app server di sviluppo,...di produzione ....
c'è la necessità di utilizzare un name space che contiene diverse classi di helper
che è posizionato ogni volta in una dir diversa fuori dal tree dell'app
le uniche info che posso usare sono il path_to_ext_lib ed il nome del namespace
volendo generalizzare pensavo di fare così:
Codice: Seleziona tutto
set_include_path(get_include_path().PATH_SEPARATOR.'path_to_ext_lib');
splregister_autoload(array($kernel,'autoloader'));
function autoloader($className){
//splitto className in nomeClasse nomeNamespace
if(nomeNamespace=='name space xtlib'){
require_once $path_to_ext_lib.$nomeClasse.'.cls.php';
}
else{
//replace'\',''
require_once $nomeNamespace.PATH_SEPARATOR.$nomelasse.'.cls.php';
}
}
Re: php include
che è posizionato ogni volta in una dir diversa fuori dal tree dell'app
perché mai? Scelta bizzarra.
Comunque in un qualche momento dovrà essere effettuato il deploy dell'applicazione su ogni macchina no? Basta inserire il path della macchina specifica nel suo script di deploy.
In realtà se davvero state usando composer non capisco perché non lo usate per tutte le dipendenze.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
php composer
mi capita di dover installare diverse library con composer nello stesso progetto php,
ogni library ha il proprio compser.json
qual'è il metodo da seguire per installarle ?
ogni library ha il proprio compser.json
qual'è il metodo da seguire per installarle ?
Re: php composer
Dare il comando:
Trattandosi di un argomento praticamente identico unisco alla discussione "php include".
Codice: Seleziona tutto
php composer.phar require nomelibreriaPrima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php include
usiamo composer per le lib standard / frameworks che già hanno il composer.json
e si siamo pigri e/o non abbiamo mai tempo
scelta strana è vero così facendo abbiamo un .ini con 'solo' 2,3 parametri da cambiare di cui uno il path.
e si siamo pigri e/o non abbiamo mai tempo
scelta strana è vero così facendo abbiamo un .ini con 'solo' 2,3 parametri da cambiare di cui uno il path.
Re: php include
Quindi da qualche parte l'informazione sul Path c'è... Basta leggerla da lì
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php include
esatto
il mio ragionamento è il seguente
spl_autoload_register() in implementazione std non riconosce correttamente maiuscole,minuscole nei file system come linux quindi non riesce a risolvere correttamente l'asociazione \namespace\classe con il relativo file quindi scrivo un autoloader custom che mantiene il corretto case
uso come root namespace .../.../src cui aggancio sub dir <namespace...a,b,c>
all'include path aggiungo il path delle librerie esterne
a questo punto
se classname contiene il namespace delle lib ext lo strippo la require troverà il nome file della classe perchè nell'include path
se classname ha un altro name space converto backslash in slash e troverò cmq il file della classe nella subdir del namespace
quello che volevo fare è un controllo preventivo per evitare errori alla fine sono riuscito trovare la funzione
non solo verifica se $filename verrà incluso ma torna il full path risolto (sempre sulla base dell include_path)
il mio ragionamento è il seguente
spl_autoload_register() in implementazione std non riconosce correttamente maiuscole,minuscole nei file system come linux quindi non riesce a risolvere correttamente l'asociazione \namespace\classe con il relativo file quindi scrivo un autoloader custom che mantiene il corretto case
uso come root namespace .../.../src cui aggancio sub dir <namespace...a,b,c>
all'include path aggiungo il path delle librerie esterne
a questo punto
se classname contiene il namespace delle lib ext lo strippo la require troverà il nome file della classe perchè nell'include path
se classname ha un altro name space converto backslash in slash e troverò cmq il file della classe nella subdir del namespace
quello che volevo fare è un controllo preventivo per evitare errori alla fine sono riuscito trovare la funzione
Codice: Seleziona tutto
string stream_resolve_include_path ( string $filename )
Re: php include
Io ancora non ho capito una cosa, se usate composer e le librerie sono conformi agli standard PSR, perché non passate semplicemente il path della libreria nella configurazione di composer?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php include
le app sviluppate sono conformi, le lib standard che usiamo 'twig','silex' e qualche orm anche
tutto tranne queste lib 'legacy' che sono fuori dal ns 'dominio'
così facendo è sufficiente avere nel .ini il path del resto non si tocca nulla
tutte le app che sviluppiamo hanno un set di classi base più quelle nuove specifiche per ogni app, il resto possibilmente non si tocca.
sembra essere più un problema 'politico' che tecnico
ahimè la vita è così
tutto tranne queste lib 'legacy' che sono fuori dal ns 'dominio'
così facendo è sufficiente avere nel .ini il path del resto non si tocca nulla
tutte le app che sviluppiamo hanno un set di classi base più quelle nuove specifiche per ogni app, il resto possibilmente non si tocca.
sembra essere più un problema 'politico' che tecnico
ahimè la vita è così
Re: php include
Questo però non risponde all'ultima domanda.
Perché non configurate le librerie legacy in composer?
Perché non configurate le librerie legacy in composer?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: php include
pur non essendo la situazione migliore e concordo, piace di più l'idea di modificare un parametro nell'ini, attività che può essere fatta in qualunque momento di vita dell'app e sopratutto senza modificare alcun file sorgente, json compreso.
Re: [risolto] php include
Mi sfugge perché un file json è considerato sorgente e un file ini no.
JSON non è un linguaggio di programmazione, può essere utilizzato solo per rappresentare dati.
Comunque se con l'if che ti ho suggerito hai risolto scrivilo nel titolo.
JSON non è un linguaggio di programmazione, può essere utilizzato solo per rappresentare dati.
Comunque se con l'if che ti ho suggerito hai risolto scrivilo nel titolo.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: [risolto] php include
anche a me
opero in un contesto molto strutturato i programmatori sono responsabili del loro codice
tutto il resto è fatto da altri
la gestione del versioning dal pm
il db e l'ambiente di esecuzione dai sistemisti
pubblicazione e rilascio sono del pm
che personalizza il .ini
il pm non conoscendo json probabilmente pensa che sia codice quindi ricade sotto la responsabilità del prg.
detto questo rivediamo insieme la soluzione per verificare se un file verrà effettivamente incluso
mi piace molto la funzione stream_resolve_include_path perchè in caso positivo torna il full path del file.
Grazie a tutti.
opero in un contesto molto strutturato i programmatori sono responsabili del loro codice
tutto il resto è fatto da altri
la gestione del versioning dal pm
il db e l'ambiente di esecuzione dai sistemisti
pubblicazione e rilascio sono del pm
che personalizza il .ini
il pm non conoscendo json probabilmente pensa che sia codice quindi ricade sotto la responsabilità del prg.
detto questo rivediamo insieme la soluzione per verificare se un file verrà effettivamente incluso
Codice: Seleziona tutto
<?php
/* bene riepilogando per testare se il $filename verrà incluso
* con include o require vedere la funzione can_include
*/
function can_include($filename)
{
//metodo proposto da Zoff che testa l'errore
$included = @include($filename);
//utilizzo funzione php
$included=(stream_resolve_include_path ($filename )!==FALSE);
return $included;
}
?>
Grazie a tutti.
Ultima modifica di eaghezzi il domenica 24 maggio 2015, 19:01, modificato 1 volta in totale.
Re: [risolto] php include
Il nome della funzione è fuorviante, la funzione non controlla se un file è stato importato ma tenta di importarlo e ti restituisce un booleano che indica se il file è nell'include path.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- eaghezzi
- Scoppiettante Seguace

- Messaggi: 725
- Iscrizione: martedì 21 luglio 2009, 10:27
- Desktop: Lubuntu
- Distribuzione: Ubuntu 14.04.1 LTS i686
- Sesso: Maschile
- Località: Valleambrosia
Re: [risolto] php include
questa volta non sono daccordo
la funzione fa esattamente quello che dice il nome
stream_resolve_include_path($filename)
se $filename è nell'include path e quindi verrà incluso (quando richiesto con require o include)
ritorna il path
altrimenti ritorna ===FALSE
non volevo una funzione per includere un file, ma una funzione per controllare se il file sarebbe stato incluso senza generare errori.
tenendo presente che si può farlo canonicamente basta esplodere get_include_path() e controllare ogni singola dir con le funzioni
di filesystem apposite come is_readable(),is_file ()...
la funzione fa esattamente quello che dice il nome
stream_resolve_include_path($filename)
se $filename è nell'include path e quindi verrà incluso (quando richiesto con require o include)
ritorna il path
altrimenti ritorna ===FALSE
non volevo una funzione per includere un file, ma una funzione per controllare se il file sarebbe stato incluso senza generare errori.
tenendo presente che si può farlo canonicamente basta esplodere get_include_path() e controllare ogni singola dir con le funzioni
di filesystem apposite come is_readable(),is_file ()...
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti
