Aller au contenu

Ne pas executer un script apres x secondes


ZuckBin

Sujets conseillés

Bonjour,

Comment stopper l'exécution d'un script après un délais bien précis?

Le but du jeu est de stopper l'exécution d'un script publicitaire qui s'arrêtera si la publicité n'a pas répondu après x secondes, pour ne pas "freezer" mon site, et attendre indéfiniment le serveur de publicité dans le vide, et avoir un site bloqué!

Merci.

Cordialement.

Lien vers le commentaire
Partager sur d’autres sites

Ce sont des publicitées Javascript, mais mon intégration est en PHP, et c'est donc PHP et Mysql qui va aller dire quelle publicitées placer et afficher en fonction de ma rubrique.

Je préfère le faire en PHP, pour ceux qui désactivent Javascript.

Lien vers le commentaire
Partager sur d’autres sites

Un autre solution : tu utilises ajax pour charger ta zone de publicité, indépendamment du reste du site.

Si le script gérant la pub de répond pas, dans le pire des cas tu auras une div vide (ou avec un contenu par défaut) , mais cela n'empêchera pas de consulter le reste de ton site !

Edit:

Je préfère le faire en PHP, pour ceux qui désactivent Javascript.

Je n'avais pas vu désolé !

Modifié par K-Ola
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

J'ai récupérer ca:

// Timeout in seconds
$timeout = 5;

$URL="http://fr.a2dfp.net/ad?s=".$row_pub['id']."&m=js&ncb=".$a2dRandom."";

$fp = fsockopen("$URL", 80, $errno, $errstr, $timeout);

if ($fp) {
fwrite($fp, "GET /file.php HTTP/1.0\r\n");
fwrite($fp, "Host: $URL\r\n");
fwrite($fp, "Connection: Close\r\n\r\n");

stream_set_blocking($fp, TRUE);
stream_set_timeout($fp,$timeout);
$info = stream_get_meta_data($fp);

while ((!feof($fp)) && (!$info['timed_out'])) {
$data .= fgets($fp, 4096);
$info = stream_get_meta_data($fp);
ob_flush;
flush();
}

if ($info['timed_out']) {
echo "Connection Timed Out!";
} else {
echo '<script type="text/javascript" src="'.$data.'"></script>';
}
}

mais j'ai ce message erreur:

Warning: fsockopen() [function.fsockopen]: unable to connect to http://fr.a2dfp.net/ad?s=xxxxx&m=js&am...b=xxxxx:80 (Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?)

Une idée ?

Modifié par olitax
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

J'ai fini par trouver comment faire, en utilisant la librairie cURL

$URL="http://example.com";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
$data = curl_exec($ch);
curl_close($ch);

if(ereg("HTTP/1.1 200 OK", $data))
{
echo '<script type="text/javascript" src="http://example.com"></script>';
}

Donner moi votre retour sur ce code ;)

Modifié par ZuckBin
Lien vers le commentaire
Partager sur d’autres sites

Si le but est juste de gérer le timeout PHP, il y a une variable pour ça :

ini_set('default_socket_timeout', 3);
@readfile('http://url.de.ta/pub.php');

Par contre pour ma part je ne vois pas l'intérêt de ta méthode :

- site plus lent, aucun parallélisme et empêche certainement toute mise en cache de tes propres pages

- l'internaute risque de ne pas être "tracké" comme il faut (IP du serveur + pas de cookie), donc tu risques de ne pas être payé

Tout ça pour quoi ?

- éviter d'utiliser du javascript alors qu'une grande partie des tags des régies l'impose

- éviter d'utiliser une iframe parce que ce ne serait pas "valide". Tiens c'est nouveau ça... à moins que tu utilises du XHTML Strict, mode dans lequel les publicités des régies ne fonctionnent pas non plus (document.write oblige...)

A mon avis tu t'embêtes pour de mauvaises raisons là.

Lien vers le commentaire
Partager sur d’autres sites

En javascript, c'est l'intégration toute simple du tag de pub via <script src="XXXX" type="XXX"></script>.

PS : du XHTML "strict" avec un content-type en text/plain alors, non ?

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

J'ai ca comme doctype:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

et c'est bien du type text/plain

Modifié par ZuckBin
Lien vers le commentaire
Partager sur d’autres sites

J'avoue ne pas comprendre ta dernière remarque, à a partir du nomment ou je vais utilisé sur ma page web une iframe, mon code ne sera plus valid, et comportera des erreurs ;)

Lien vers le commentaire
Partager sur d’autres sites

Je n'ai pas été très clair mais comme le dit captain_torche il te suffit de changer de doctype, vu que de toutes façons tu n'utilises pas du "vrai" XHTML.

Lien vers le commentaire
Partager sur d’autres sites

Hello,

Effectivement, je suis en Xhtml strict, si tu as la méthode pour le faire en Js, je prend ;)

adsense, entres autres, n'est pas valide xhtml strict, donc si tu envoies ta page avec adsense en strict, tu ne verras pas les pubs affichées.

et quand je parle de strict, c'est aussi, et surtout, les header envoyés en xhtml strict et non en html/text

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...