Sujet : [PHP] Peut-on faire un timeout lors d'un include( 'http://...' ) ?

Salut la dedans,

J'ai une fonction qui me permet d'aller récupérer les derniers messages du forum pour pouvoir les afficher dans une page web (càd ce que vous pouvez trouver sur la page d'accueil de JeBulle.Net).

Voici le code qui me permet de récuperer les messages :

ob_start();
@include( 'http://forums.jebulle.net/extern.php?action=active&show=5&fid=14,15&length=100' );
$sMessages = ob_get_clean();

Mon problème est le suivant : l'inclusion de cette page distante peut prendre plus ou moins de temps selon que le serveur répond plus ou moins vite à la requête http. L'ennui c'est que ce temps d'attente du résultat est répercuté sur le chargement de la page qui va recevoir les données. Et ça m'embête wink.

Je cherche donc à savoir si l'est possible de faire la même opération mais avec un timeout, de sorte que, par exemple, si le serveur ne répond pas dans la seconde, on passe à la suite du traitement en disant que les données n'ont pu être lues car le serveur n'a pas répondu assez vite. De cette façon, on évite d'avoir un temps de chargement de page trop long.

Une solution serait d'instancier un processus parallèle au processus courant, mais il faudrait alors faire une synchro à la fin et récupérer le résultat du processus créé. Et alors en PHP, je n'ai jamais fait ça...et je ne sais pas vraiment si cela est possible. Y'a bien une gestion des processus, avec du fork et tout le tralala mais cela ne fonctionne que sous Linux (normal...).

Des idées à me proposer ?

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : [PHP] Peut-on faire un timeout lors d'un include( 'http://...' ) ?

Tu veux renoncer au chargement de ces données ou juste continuer à charger la page même si les données externes arrivent après ?

Si c'est le deuxième cas qui t'interesse alors il y a une solution : AJAX ! Le premier voulant bien sur dire asynchronous wink
Avec un objet XMLHttpRequest qui va bien tu peux utiliser la génération RSS du fichier [c]extern.php[/c] de PunBB.

Edit : j'ai fait 2-3 petits tests mais il y a un petit porblème : tu es obligé d'accéder à un fichier local il me semble. Sinon il faut créer un petit fichier PHP qui aille chercher le résultat de la requête GET directement en socket. Ca ne doit pas être très compliqué mais il te faut un fichier supplémentaire.

Voila, je continu mes recherches ...

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : [PHP] Peut-on faire un timeout lors d'un include( 'http://...' ) ?

Salut smile

Je veux renoncer au chargement des données. En fait l'idéal aurait été de pouvoir faire :

include( $sAdresseHttp, 1000 );

càd chercher l'adresse http fournie avec un timeout de 1000ms.

Celà dit, une solution AJAX pourrait être sympa aussi. Je pensais bien qu'il était possible de faire quelque chose avec AJAX, mais je suis un peu frileux quant à son intégration pour le moment...Est-ce lourd de faire ce genre de chose en AJAX ? Si c'est simple, je veux bien tenter. Le seul défaut c'est qu'il faut Javascript activé, mais je crois que par les temps qui court, le javascript revient fortement à la mode, voire quasi incontournable...

Si tu as un exemple, je suis preneur. Merci.

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : [PHP] Peut-on faire un timeout lors d'un include( 'http://...' ) ?

En fait, après pas mal de recherches sur le net j'ai trouvé quelques trucs qui peuvent me servir de base donc je crois que je vais en faire un !
Et pour la restriction, en fait il est impossible au JavaScript d'accéder à une URL distante pour des raisons de sécurité.

Donc pour résumer je vais faire 3 fichiers :
- la librairie d'accès à un fil RSS (pas de moi)
- un fichier PHP pour les appels et qui retroune le XML
- un fichier JS qui est la pour controler l'affichage sur la page

Comme ça il n'y aura qu'une petite ligne d'appel dans le template.

Je te tiens au courant ....

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : [PHP] Peut-on faire un timeout lors d'un include( 'http://...' ) ?

Ca roule, merci smile

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : [PHP] Peut-on faire un timeout lors d'un include( 'http://...' ) ?

Ca devient quoi cette implémentation ?

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : [PHP] Peut-on faire un timeout lors d'un include( 'http://...' ) ?

Salut !

En fait j'ai refait une classe pour ouvrir une socket pour aller cherche directement le résultat d'une URI et ça fonctionne .... presque !!!
Le problème est que j'ai des caractères en trop en entete et en fin de fichier. Donc le résultat n'est pas un XML valide -_-'

Mais j'ai pas trop touché mon ordi depuis quelques jours... faut que je m'y remette ! wink

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : [PHP] Peut-on faire un timeout lors d'un include( 'http://...' ) ?

Ok, j'attends ta release smile

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW