Pagina 1 di 1

[php] Verificare caricamento script esterno [risolto]

Inviato: gio mag 24, 2012 11:51
da aschenaz
E' una richiesta un po' strana, ma faccio prima a spiegare il caso concreto... :)
Sto rifacendo il sito alla mia parrocchia; praticamente è finito, ma presenta un inconveniente, che non dipende da me: include un utile widget di un sito esterno, che visualizza un almanacco quotidiano in materia (liturgia, santi etc...); solo che, con una certa frequenza, capita che il widget sia irraggiungibile (probabilmente per limiti di banda), rallentando vistosamente il caricamento dell'intera pagina.
In teoria, sarebbe semplice verificare la disponibilità del file remoto: con allow_url_fopen settato a ON, si dovrebbe poter utilizzare tranquillamente if(fopen("URL...","r")) o if(file_exists("URL...")); in pratica, invece, in entrambi i casi mi dice che è sempre indisponibile (anche quando sono sicuro che è online). Naturalmente, non mi sono limitato alla verifica dell'url dello script, provando diversi percorsi del sito...

Qualche suggerimento?

Re: [php] Verificare caricamento script esterno

Inviato: gio mag 24, 2012 19:00
da aschenaz
Ho fatto ricorso a CURL, con una funzioncina che verifica semplicemente lo stato del server remoto.
Funziona. Però, se il server è down, il sito ci mette lo stesso un tantino a caricare...

Re: [php] Verificare caricamento script esterno

Inviato: gio mag 24, 2012 19:10
da teox99
non puoi rifare anche il widget?

Re: [php] Verificare caricamento script esterno

Inviato: gio mag 24, 2012 20:43
da miklos
scusami, ma non ho capito bene.
il tuo sito include tramite html o tramite php il widget??!?!?
in altre parole il php scarica il widget e lo include nel codice... oppure lo fai tramite javascript/Iframe etc etc etc?

ad ogni modo qualunque sia la questione la lentezza del tuo sito puol' dipendere da quanto lo è pure il sito esterno.. sembra paradossale ma se un webserver è carico anche gli errori (404/500 e compagnia bella) vengono mandati 'lentamente'
tieni conto inoltre che se accedi ad una risorsa esterna tramite nome dominio passi attraverso DNS e se il dominio in questione è hostato su un infrastruttura condivisa (hosting nn dedicato insomma) i tempi di latenza anche per le risposte negative possono essere notevoli, soprattutto poi se la non disponibilità dipende da un server web che nn ce la fa piu'(quindi non spento del tutto) e in tal caso devi attendere per forza di cose il timeout stabilito (che tipicamente varia dai 5 secondi al minuto)

EDIT: forse infatti l'unico modo per alleviare il tutto è mettere un timeout sulla richiesta che fai con curl in modo che se nn ottiene risposta nell'arco di un secondo nn include il widget. ho trovato al volo questo link che spiega come fare a mettere un timeout di connessione su curl.

Re: [php] Verificare caricamento script esterno

Inviato: gio mag 24, 2012 21:58
da aschenaz
Si tratta un semplice richiamo ad un javascript in iframe. Anche se includessi lo script, lo stesso non potrei riprodurre tutto il widget, almeno in tempi brevi (è abbastanza complesso e va certamente a pescare su di un database di una certa entità).

La lentezza, comunque, la riscontro solo quando la risposta è negativa. Sì avevo pensato ad impostare un timeout. Adesso vado a vedere quel link, grazie. :)

EDIT: c'era già il timeout nella funzione che usavo io. Era impostato a 10: l'ho dimezzato (più che sufficiente)! :thumbright:

Re: [php] Verificare caricamento script esterno

Inviato: gio mag 24, 2012 23:22
da ZeroUno
Se è in un iframe usa ajax.
Metti due php. Il primo è la index.php (o chi per lui) e lo dedichi alla costruzione della pagina, e nel posto del widget ci metti un div con scritto "caricamento in corso" (o verifica widget in corso), almeno l'utente ha percezione che il sito non è bloccato, e nel frattempo un javascript asincronamente ti carica widget.php che è uno script che va a fare le verifiche del sito remoto. Se poi il sito è disponibile sostituisce il messaggio di caricamento con un iframe al widget, altrimenti lo sostituisce con un messaggio "spiacenti il widget non è disponibile".

Re: [php] Verificare caricamento script esterno

Inviato: gio mag 24, 2012 23:44
da aschenaz
Sì, in effetti ho fatto più o meno così. Siccome il widget lo deve caricare in diverse pagine, ma non tutte, ho messo la porzione di script in un modulo, che includo nelle pagine dove serve; lo script a sua volta richiama un metodo della classe principale, che verifica con curl se il sito è online e, se la risposta è false, visualizza "Almanacco attualmente non disponibile".
Adesso ho settato il timeout a 4'': così è ok!