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

Messages postés
389
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009
- - Dernière réponse : 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

Afficher la suite 
cs_garfield90
Messages postés
389
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.
cs_raoullevert
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é :-)
djmoa
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
cs_olivier59
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();
?>
TheSin
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 ;-)
xabi62
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
djmoa
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
kankrelune
Messages postés
1305
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°
deboutv
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...
djmoa
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
pifou25
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?
cs_garfield90
Messages postés
389
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 ;)
djmoa
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
kankrelune
Messages postés
1305
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°
djmoa
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
kankrelune
Messages postés
1305
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°
atezis
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
djmoa
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 ;)