PHP, surcharge ? Sleep ?

Fermé
Bidouyouille - 20 oct. 2008 à 20:39
 Bidouyouille - 22 oct. 2008 à 20:34
Bonsoir,

Voilà j'ai trouvé une fonction simple sur le net qui me permet de transformaer une image url en miniature :

<?
$pic = $_GET['pic'] ;
// éditez les 2 variables ci-dessous en fonction du résultat souhaité :
$largeur = "280"; // correspond à la largeur de l'image souhaitée
$hauteur ="200"; // correspond à la hauteur de l'image souhaitée

// et voici la création de la miniature...
header("Content-Type: image/jpeg");
list($width, $height, $type, $attr) = getimagesize($pic);

if($type == "1")
{
$img_in = imagecreatefromgif($pic);
}
if($type == "2")
{
$img_in = imagecreatefromjpeg($pic);
}
if($type == "3")
{
$img_in = imagecreatefrompng($pic);
}
$img_out = imagecreatetruecolor($largeur, $hauteur);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
$t = imagejpeg($img_out);

echo $t;
?>


Fantastique, ça fonctionne... mais mal.
Elle s'apelle ainsi :
http://monsite.miniature.php?pic=http://imagedunet.com/uneimage.png

En fait je veux afficher 10 images et pour ca je fais une boucle for. Mais j'ai l'impression que mon serveur Free n'aime pas que j'apelle quasi-simultanément 10 fois de suite le fichier miniature.php.
J'ai donc esseyé un sleep(5) mais j'ai l'impression que le sleep n'a pas d'effet.
Je suis sur que c'est une saturation quelquepart puisque si j'inverse les images, les dernieres s'affichent bien en premier et les premieres ne s'affichent plus.

Sauriez-vous m'aider, je patauge :S

14 réponses

Bonjour

Que la fonction sleep ne marche pas chez free, c'est normal. Elle fait partie des fonctions interdites :
https://www.free.fr/assistance/947-acces-libre-php-fonctions-php-interdites.html
Quant au problème d'affichage de plusieurs images, je ne vois pas trop. Peut-être un dépassement de l'espace mémoire autorisé ? Mais a priori, l'appel pour chaque image est une connexion différente et les tailles des images ne s'ajoutent pas. As-tu un lien pour que nous puissions voir ce qui se passe ?
0
Bidouyouille
21 oct. 2008 à 17:38
Merci pour ta réponse, domage que ce soit interdit, il y a de grandes probabilités que le probleme soit une saturation de connexion. J'ai apercu un fichier PHP dans les entetes de mon tracker et en allant voir une url genre overload.php, je suis tombé sur le site de Free me disant que j'avais depassé le nombre maximum de connections.
Domage avec le sleep ça fonctionnerait :s, pas de chance. Je peux peut etre en creer un avec un calcul de nombres premiers ?
Sans celà, je ne sais pas vraiment comment faire.
Si vous voulez esseyer c'est là :

http://nowaywow.free.fr/cellule.php?idcel=000
0
Bidouyouille
21 oct. 2008 à 18:15
Vous pouvez esseyer les liens devant les photos, vous verrez que les 3 derniers fonctionnent quand on les copiecolle dans un autre onglet du navigateur.

Sauriez-vous m'aider ou pensez-vous qu'il soit possible de creer une fonction sleep_underground ?
0
Bidouyouille
22 oct. 2008 à 13:21
Je suis con moi, je vais tout simplement faire un while(1) en verifiant timer. C'est vraiment con de bloquer la fonction sleep, n'est-ce pas ce qu'elle fait ?

sleep(10) :

while(!$end)
{
if($time - $lasttime > 10)
$end=1 ;
}

Non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai essayé ton lien et je n'ai vu aucune image. Mais j'ai remarqué que tes images provenaient d'un autre site : peux-tu essayer d'abord avec des fichiers du même site, plutôt qu'avec des fichiers distants ?
Aucun des liens à ton script ne marche, et d'apès le message d'erreur, ça viendrait du fait que les fichiers soient distants.

D'autre part, une boucle en attendant l'horloge n'est pas la même chose qu'un sleep. Avec un sleep, ton script ne consomme (presque) aucun temps processeur, alors qu'avec une boucle, tu en consommes un max pour ne rien faire. Dans un environnement multitâche, et, encore plus, mutualisé, c'est une grosse erreur.
0
Bidouyouille
22 oct. 2008 à 14:25
Ben je m'en fou c'est pas mon serveur, ils n'ont qu'a remettre leur sleep ^^

Je suis en train de faire des modifications, l'exemple n'est donc plus disponible.
Merci de votre aide, au revoir.
0
Ben je m'en fou c'est pas mon serveur, ils n'ont qu'a remettre leur sleep ^^
Ils ont de bonnes raisons de l'interdire.
Tu t'en fous, c'est pas ton serveur ? Un peu, si. Et c'est aussi le mien. Je suis chez free aussi.
Ton problème, c'était pas le mien. Pourtant j'ai essayé de t'aider, mais vu la mentalité, ne compte pas sur moi pour la suite.
0
Bidouyouille
22 oct. 2008 à 14:56
Pourquoi serait-ils les seuls à l'interdire ? Et puis tu l'a dit toi meme : la fonction sleep n'utilise pas de cpu. J'aimerais donc bien connaitre la bonne raison.
De toutes manières je dois gruger de partout, plus on mets de la securité, moins on est libre et ca devient un vrai casse-tete pour faire du code basic. Je pensais regler ca en quelques jours et je m'apercois que je rame et qui plus est suis emmerdé soit par une configuration de serveur, soit par une fonction PHP mal codée. Oui, j'ai trouvé le probleme venait d'une fonction PHP :

Le probleme se situerait dans la fonction getimagesize.
Je viens d'en faire plusieurs d'affilé et j'ai parfois ce message :

[function.getimagesize]: failed to open stream: HTTP request failed!

C'est très aléatoire. Si j'en fait 6 ou 10 d'affilé ca fait carrément buguer tout et me propose de telecharger mon fichier php lol.

En fait la fonction ne fonctionne pas tres bien pour les URL et ils n'ont pas prevu de retry. Je suis encore de la bai...

Bon calmos, gruge et perseverence sont les maitres mots.
0
Bidouyouille
22 oct. 2008 à 16:17
Esquive numero 1 :

etant donné que la fonction imageresize fonctionne mieux en local, j'ai decidé d'utiliser la fonction copy() pour copier les images chez Free dans un premier temps.
Resultat :

[function.copy]: failed to open stream: Connection timed out

Je pense que toutes ces fonctions sont obsoletes et auraient besoin d'un retour TIME_OUT.
Ainsi ca fonctionnerait chez Free qui interdit le sleep et limite les connections, ce qui cree ces time out.

Je ne voudrais pas avoir à utiliser ce while(1) mais je crois bien que je vais y etre forcé.
Je reflechis à un plan B.
0
Bidouyouille
22 oct. 2008 à 17:02
Bon je m'arete ici pour le moment, ma fonction slip ne fonctionne pas à priori.

function slip($long)
{
	$end = 0 ;
	$last = time() ;
	while(!$end)
	{
		$now = time();
		$ecart = $now - $last ;
		if($ecart == $long)
			$end = 1 ;
	}
}


Je n'ai pas dit mon dernier mot. Si le serveur est naze, tans pis, je le ferait en javascript chez le client...
0
Pourquoi serait-ils les seuls à l'interdire
Pourquoi ne te fais tu pas héberger ailleurs, alors ?
J'aimerais donc bien connaitre la bonne raison.
Le CPU est libéré, mais pas la mémoire...

pour ton slip, le test d'égalité $ecart == $long est très risqué. si tu fais un appel pendant que $ecart < $long et qu'au suivant $ecart est > $long, tu n'arrêteras jamais. Toujours comparer $ecart >= $long
D'ailleurs, ta boucle pourrait être beaucoup moins compliquée :

function slip($long)
{
	$end = time()+$long ;
	while(time() <= $end);
}
0
Bidouyouille
22 oct. 2008 à 17:34
Mais ?!

Tu m'aide à creer une mechante fonction ? C'est sympa de ta part en tout cas, ne t'inquiete pas pour Free, si ils y voient un inconvenient ils modifieront de leurs coté, c'est eux qui ont les manettes.

Effectivement le == est risqué, j'esserais avec >, merci pour ça et pour l'optimisation du code :)

La raison de cet hebergeur c'est simplement la facilité (profiter de mon avantage a etre chez Free et gratuit aussi) et l'assurance qu'il n'y ai pas de pub, le PHP, mySQL, ...

Sinon je viens d'esseyer en javascript, ca n'a pas l'air probant non plus. Mon sac commence à se vider. Pour le reste je verrai demain.

Dans le pire des cas, je peux creer un script en bash pour faire ces miniatures et toutes les uploader d'un coup mais je trouve ca domage d'etre bloqué comme ça.
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
22 oct. 2008 à 19:29
Bonjour.

ne t'inquiete pas pour Free, si ils y voient un inconvenient ils modifieront de leurs coté, c'est eux qui ont les manettes.
Pas tout à fait.
Ils ne vont pas s'embêter à modifier du code, ils vont juste virer ton compte... Et éventuellement le contenu !

J'ai du mal à comprendre ce que tu veux faire.

Ce ne serait pas plus simple de générer une fois pour toutes les miniatures ?
Genre, à la première consultation (condition SI miniature n'existe pas) ou à l'upload tu généres une miniature.
Et après tu te contentes de l'afficher.
-1
Bidouyouille > macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008
22 oct. 2008 à 20:34
Ils ne vont pas s'embêter à modifier du code, ils vont juste virer ton compte... Et éventuellement le contenu ! 


C'est bien plus simple de regler un probleme que de taper sur de pauvres codeurs inocents.

C'est simple je veux faire un generateur de miniatures. Pour ça je dois creer un script pour ne pas avoir à entrer les URL de mes images manuellement, d'autant qu'il y en a beaucoup. Peu importe que ca mette 3 heures, ce sera pas frequent comme cycle et le reste du temps, le serveur se repose grace aux miniatures qui n'absorbent pas beaucoup de bande passante.

Je pense que je vais le faire sur mon propre serveur, tans pis, si c'est le seul moyen d'etre libre de nos jours alors osef les services à la mort-moi-le-noeuds, on est jamais mieux servi que par soit même.

J'ai esseyé Ifrance c'est encore pire lol. Eux ils interdisent carrement la fonction getsizeimage :D
Sans deconner on fait quoi avec un hebergeur de nos jour ? un blog ? super ! autant les faire sur des plateformes prevues a cet effet...

Bon je suis raleur, mais je code pas souvent et ca m'agace de bloquer à cause de restrictions dites securitaires, je ne suis pas un voyou, je veux juste faire mon programme, comme il se devrait de l'etre : simple.
0
Bidouyouille
22 oct. 2008 à 18:21
J'ai trouvé ceci :

  max_execution_time  entier

    Fixe le temps maximal d'exécution d'un script, en secondes. Cela permet d'éviter que des scripts en boucles infinies saturent le serveur. La configuration par défaut est de 30 secondes.

    Le temps d'exécution maximum n'est pas affecté par des appels systèmes tels que sleep(). Reportez-vous à la fonction set_time_limit() pour plus de détails.

    Vous ne pouvez pas modifier la valeur de cette directive avec ini_set() lorsque PHP est configuré en safe mode. Le seul moyen de le faire est de désactiver le safe mode ou de changer la valeur dans php.ini.

    Votre serveur web peut avoir d'autres temps d'exécution maximum. E.g. Apache a une directive Timeout, IIS a une fonction de temps d'exécution maximum pour les CGI, les deux de 300 secondes par défaut. Lisez la documentation de votre serveur web la signification de cela.


Le mieux serait que je trouve un autre hebergement avec sleep.
0
Bidouyouille
22 oct. 2008 à 19:06
Ca me rassure, je ne suis pas le seul...
Bon ciao Free lol.

http://www.phpcs.com/...
                
                
0