djmoa
Messages postés39Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention27 mai 2009 28 juil. 2007 à 15:15
Merci, ca fait plaisir de voir qu'il y a qelques personnes interessées ;)
atezis
Messages postés2Date d'inscriptionmardi 1 août 2006StatutMembreDernière intervention27 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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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és39Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention27 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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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és39Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention27 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és388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 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és144Date d'inscriptionlundi 13 octobre 2003StatutMembreDernière intervention21 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és39Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention27 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és2Date d'inscriptionvendredi 22 octobre 2004StatutMembreDerniè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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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és39Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention27 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és84Date d'inscriptionjeudi 31 janvier 2002StatutMembreDernière intervention19 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és331Date d'inscriptionmardi 12 novembre 2002StatutMembreDernière intervention10 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és5Date d'inscriptionmardi 16 octobre 2001StatutMembreDernière intervention24 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és39Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention27 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és4Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention19 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és388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 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.
28 juil. 2007 à 15:15
27 juil. 2007 à 22:52
merci
13 nov. 2006 à 12:27
@ tchaOo°
13 nov. 2006 à 10:11
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
12 nov. 2006 à 18:31
@ tchaOo°
11 nov. 2006 à 20:34
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
10 nov. 2006 à 14:51
J'espère que je ne dis pas une connerie ;)
10 nov. 2006 à 11:57
25 juil. 2006 à 12:31
25 juil. 2006 à 12:04
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...
21 juil. 2006 à 14:36
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°
20 juil. 2006 à 09:45
19 juil. 2006 à 18:17
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
19 juil. 2006 à 14:04
{
$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 ;-)
19 juil. 2006 à 10:39
<?php
phpinfo();
?>
19 juil. 2006 à 09:37
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
19 juil. 2006 à 06:38
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é :-)
18 juil. 2006 à 14:50
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.