[php] Verificare caricamento script esterno [risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

[php] Verificare caricamento script esterno [risolto]

Messaggio 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?

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: [php] Verificare caricamento script esterno

Messaggio 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...

Avatar utente
teox99
Linux 3.x
Linux 3.x
Messaggi: 738
Iscritto il: ven 25 lug 2008, 14:54
Slackware: 13.37
Desktop: KDE - Xfce
Località: Roma[Eur]
Contatta:

Re: [php] Verificare caricamento script esterno

Messaggio da teox99 »

non puoi rifare anche il widget?

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: [php] Verificare caricamento script esterno

Messaggio da ilmich »

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.
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: [php] Verificare caricamento script esterno

Messaggio 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:

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: [php] Verificare caricamento script esterno

Messaggio 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".
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: [php] Verificare caricamento script esterno

Messaggio 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!

Rispondi