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

cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009 - 18 juil. 2006 à 14:50
djmoa Messages postés 39 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 27 mai 2009 - 28 juil. 2007 à 15:15
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

djmoa Messages postés 39 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 27 mai 2009
28 juil. 2007 à 15:15
Merci, ca fait plaisir de voir qu'il y a qelques personnes interessées ;)
atezis Messages postés 2 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 27 juillet 2007
27 juil. 2007 à 22:52
Salut, tout çà pour dire que, malgré quelques imperfections de ce script, je suis satisfait d'avoir trouvé un substitut à la fonvtion sleep!
merci
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
13 nov. 2006 à 12:27
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°
djmoa Messages postés 39 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 27 mai 2009
13 nov. 2006 à 10:11
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
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 nov. 2006 à 18:31
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°
djmoa Messages postés 39 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 27 mai 2009
11 nov. 2006 à 20:34
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
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
10 nov. 2006 à 14:51
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 ;)
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
10 nov. 2006 à 11:57
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?
djmoa Messages postés 39 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 27 mai 2009
25 juil. 2006 à 12:31
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
deboutv Messages postés 2 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 3 décembre 2007
25 juil. 2006 à 12:04
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...
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 juil. 2006 à 14:36
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°
djmoa Messages postés 39 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 27 mai 2009
20 juil. 2006 à 09:45
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
xabi62 Messages postés 84 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 19 juillet 2006
19 juil. 2006 à 18:17
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
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
19 juil. 2006 à 14:04
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 ;-)
cs_olivier59 Messages postés 5 Date d'inscription mardi 16 octobre 2001 Statut Membre Dernière intervention 24 septembre 2008
19 juil. 2006 à 10:39
essaye la fonction dans une page php pour avoir la liste des fonctions activées


<?php
phpinfo();
?>
djmoa Messages postés 39 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 27 mai 2009
19 juil. 2006 à 09:37
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
cs_raoullevert Messages postés 4 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 19 juillet 2006
19 juil. 2006 à 06:38
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é :-)
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
18 juil. 2006 à 14:50
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.
Rejoignez-nous