FONCTION SLEEP CHEZ FREE BLOQUÉE... DÉBLOQUÉE

Signaler
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009
-
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38658-fonction-sleep-chez-free-bloquee-debloquee

Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

Merci, ca fait plaisir de voir qu'il y a qelques personnes interessées ;)
Messages postés
2
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
27 juillet 2007

Salut, tout çà pour dire que, malgré quelques imperfections de ce script, je suis satisfait d'avoir trouvé un substitut à la fonvtion sleep!
merci
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Y a pas que le time out... y a aussi le memory limit qui entre en jeux... une page qui s'appelle récursivement peu respecter le time out mais risque de faire exploser la taille en mémoire... .. . ;o)

@ tchaOo°
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

c'est justement la qu'il y a un probleme... j'ai fait un test, qui marche sur mon pc mais pas sur free cet été... je voulais faire tourner un script en boucle sur leur serveur pour pomer le contenu de plein de sites ...
de mémoire, si je faisait juste une page qui s'appelais toute seule, au bout d'une dizaine de fois elle s'arretait...
en imposant une pause de 2 secondes (cette fonction), le script se renouvellait plus de fois, au final, j'ai mis 25 secondes de sleep mais ca tournait pas en continu.. et il me semble que j'avais essayé de relayer par un autre serveur (multimania ou autre) mais j'avais rien eu de concluant donc j'ai arreté les recherches....
si qqcn arrive a qqch.... merci de m'en faire part
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Si ta page s'appeklle en boucle c'est normal que ça passe... le time out est valable pour le script courant donc si ta page s'appelle récursivement ça fait autant de time out que de pages... .. .

@ tchaOo°
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

je suis pas vraiment sur pour ton coup de la répartition du temps.. mais avec cette fonction, le temps processus devrai etre égal a peu pres au temps du script..
sur mon serveur perso, j'arrive a faire durer le script indéfiniment, meme si le time out est limité à 30 sec...
sur free, en faisant une page qui s'appelle toute seule en boucle, j'arrive a la faire durer plusieurs minutes aussi... enfin bon
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009

30 secondes c'est du temps processus, c'est à dire que ton script peut durée 5h mais utilise 20s sur le temps processus.

J'espère que je ne dis pas une connerie ;)
Messages postés
150
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
21 décembre 2014

tient à propos de Free, en théorie il y a un set_time_limit à 30 sec ce qui signifie que si le script dure un peu trop il est 'killé' au bout de 30 secondes... çà c'est la théorie: je sais pas comment sont calculées les secondes chez free mais je fais tourner des batchs de nuit (déclenché via webcron) et je sais qu'ils durent quelques minutes (3 à 4mn, sur). Je ne m'en plains pas c'est bien pratique ^^ hé je voudrais savoir si certains ont déjà pu remarquer ceci?
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

c'est vrai que si je fais un sleep de 25 secondes, ca leur boufe la socket pendant 25 secondes... tres utile en tout cas ton lien
Messages postés
2
Date d'inscription
vendredi 22 octobre 2004
Statut
Membre
Dernière intervention
3 décembre 2007

Pour le lien c'est http://faq.free.fr/adsl/5/9/3/8
Dites vous bien que si Free a décidé de bloquer ces fonctions ce n'est pas pour embêter les clients mais parce que c'est dans leur interêt. Un serveur Apache/PHP qui tourne dans une boucle infinie c'est des ressources en moins pour les autres.
Si votre page est consulté simultannéement par une personne, c'est une ressource en moins. Si votre site est consulté simultannéement par mille personnes, c'est mille ressources en moins...
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

toujours faire comme ça quand on redéfinit un fonction de php... par exemple pour une meilleur portabilité entre les versions de php... .. .

if(!function_exists('sleep'))
{
function sleep($nbsec) //$nbsec c'est le nombre de secondes
{
$nbsec = abs ( (int) $nbsec) ;
$tps=time();
while($tps+$nbsec>=time()) ;
}
}

Comme ça si la fonction native est disponible c'est cette dernière qui sera utilisé... et cela fait une différence d'une part dans le temps d'exécution d'autre part, concernant sleep, le temps de battement provoqué par la fonction n'est pas contabilisé dans le max_execution_time contrairement à la boucle... .. .

Par contre il faut tester parce que ça peut bloquer vu que la fonction existe mais est désactivée via le php.ini... .. .

@ tchaOo°
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

Si certains ont eu la nécéssité d'utiliser ce code n'hésitez pas a faire partager vos experiences, ainsi que si vous avez des astuces similaires
Messages postés
84
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
19 juillet 2006

Salut,

Derniere petite modif avec le >= (qui ne servira jamais ;o) )

function Nsleep($nbsec) //$nbsec c'est le nombre de secondes
{
$nbsec = abs ( (int) $nbsec) ;
$tps=time();
while($tps+$nbsec>=time()) ;
}

XaV
Messages postés
331
Date d'inscription
mardi 12 novembre 2002
Statut
Membre
Dernière intervention
10 février 2009

function Nsleep($nbsec) //$nbsec c'est le nombre de secondes
{
$nbsec = abs ( (int) $nbsec) ;
$tps=time();
while($tps+$nbsec!=time()) ;
}

valà, je t'ai légèrement améliorée pour avec un integer toujours positif ;-)
Messages postés
5
Date d'inscription
mardi 16 octobre 2001
Statut
Membre
Dernière intervention
24 septembre 2008

essaye la fonction dans une page php pour avoir la liste des fonctions activées


<?php
phpinfo();
?>
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

tout d'abord merci pour vos commentaires...
pour le $tps+$nbsec>=time() j'ai pensé au cas de figure seulement après avoir posté le code, et comme tu le dit, ca n'arrive "jamais" (sauf quand ca arrivera). mais qui sais, une opération de maintenance ou autre et je serai grillé ...
pour le fait que le nombre de secondes soit un positif numérique, honnetement, je suis pas encore a fond dans le php et je sais pas comment verifier que ce soit un numérique, mais ca doit etre dans plein de sources deja, et pour le fait qu'il soit positif, je considère que c'est a l'utilisateur de le faire, mais bonne remarque quand meme... je ne connais pas la fonction microtime, mais ca meriterai de s'y interesser

pour ce qui est de me mettre free à dos, honnetement ils ont cas autoriser le sleep, ca leur couterai surement pas grand chose, puis comme tu le dis, le time out est de 30 secondes et je suis sur qu'apache est suffisament bien fait pour pas que je bloque tout (bonne répartition des ressources CPU), donc il rammera pas a cause de moi ;) par contre j'essaye de m'en servir pour un code qui risque de moins leur plaire

es ce que quelqu'un aurais un lien ou une liste complète des fonctions autorisées et bloquées par free ? et toutes autres restrictions ?
merci a tous
Messages postés
5
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
19 juillet 2006

Salut,

Tres sincerement, tu vas te mettre free a dos ! Faire 'ramer' le serveur avec une 'boucle infinie', ca risque de les amuser !
De toutes façons, ce genre de cas est prevu, et ton script a un temps maximum pour s'executer, apres lequel il est scratché purement et simplement. Et la , free a bloqué cette limitation !
Ton script fonctionnera donc bien pour des courtes durées (je crois que c'est 30s max, a voir ....)

Bien essayé :-)
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009

je vois un petit soucis a ton script, le cas qui n'arrive "jamais".

Imagine la grosse charge du serveur et ton while dure plus d'1 seconde, t'as condition est toujours valable mais ton script ne s'arretera jamais.

Mets a la place du != un >=, et verifie aussi que $nbSec est positif et numérique, ca t'évitera d'autres soucis (en particulier les boucles infinies)

Sur ce, script tout a fait a son niveau (débutant) mais tu pourrais etre un peu plus précis en utilisant la fonction microtime, meme si cela est peu etre trop précis.