IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Upload limité sur hebergeur


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut [Upload] Upload limité sur hebergeur
    Bonjour,
    j'ai crée une fonction qui me permet de gérer ma galerie photo.
    J'ai un dossier nommé 'FULL' qui contient mes images nommées 1.jpg, 2.jpg, ...

    Le script crée 3 formats miniatures de ces photos (miniature, aperçu, zoom).
    Tout fonctionne bien en local, bien que j'ai du rajouter un set_time_limit(0); afin de ne pas dépasser les 30s du time_limit de php.ini.
    En local, donc, tout est ok.

    Cependant, lorsque je test cette fonction sur mon hebergeur, tout commence bien, mais le script s'arrête vers la 8eme photo.

    Je pense qu'il doit y avoir un config de l'hebergeur qui évite la surcharge de son proc, mais bon...
    Pour info, je suis chez 1and1

    Quelles solutions pourriez-vous me proposer ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    function creation($repertoire){
    	// CREATION DES MINIATURES	
    	$home = $repertoire."/home/";
    	$mini = $repertoire."/mini/";
    	$big = $repertoire."/big/";
    	$full = $repertoire."/full/";
     
    	$nb=count_files($full, ".jpg", 0);
     
    	// On crée le dossier
    	mkdir($home);
    	mkdir($mini);
    	mkdir($big);
    	set_time_limit(0);
    	$i=1;
    	while($i<=$nb) {
    		$big_file = $full.$i.'.jpg';
    		$source = imagecreatefromjpeg($big_file); // La photo est la source
     
    		$largeur_source = imagesx($source);
    		$hauteur_source = imagesy($source);
     
    		if(($largeur_source)>($hauteur_source)){
    		if ($i<6) $destination = imagecreatetruecolor(250, 187); // On crée la miniature vide
    		$destination2 = imagecreatetruecolor(100, 75); // On crée la miniature vide
    		$destination3 = imagecreatetruecolor(640, 480); // On crée la miniature vide
    		}
    		else {
    		if ($i<6) $destination = imagecreatetruecolor(187,250); // On crée la miniature vide
    		$destination2 = imagecreatetruecolor(75,100); // On crée la miniature vide
    		$destination3 = imagecreatetruecolor(480,640); // On crée la miniature vide
    		}
     
    		// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image		
    		if ($i<6) $largeur_destination = imagesx($destination);
    		$largeur_destination2 = imagesx($destination2);
    		$largeur_destination3 = imagesx($destination3);
    		if ($i<6) $hauteur_destination = imagesy($destination);
    		$hauteur_destination2 = imagesy($destination2);
    		$hauteur_destination3 = imagesy($destination3);
     
    		// On crée la miniature
    		if ($i<6) imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
    		imagecopyresampled($destination2, $source, 0, 0, 0, 0, $largeur_destination2, $hauteur_destination2, $largeur_source, $hauteur_source);
    		imagecopyresampled($destination3, $source, 0, 0, 0, 0, $largeur_destination3, $hauteur_destination3, $largeur_source, $hauteur_source);
     
    		if ($i<6) $file_home = $home.$i.'.jpg';
    		$file_mini = $mini.$i.'.jpg';
    		$file_big = $big.$i.'.jpg';
    		// On enregistre la miniature"
    		if ($i<6) imagejpeg($destination, $file_home);
    		imagejpeg($destination2, $file_mini);
    		imagejpeg($destination3, $file_big);
    		echo '<img src='.$file_mini.' alt="ok" /> ';
    		$i++;
    	}
    }
    Merci d'avance pour vos réponses !

  2. #2
    Membre habitué Avatar de kazhar
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 148
    Points
    148
    Par défaut
    Eh bien, si ton hébergeur refuse que tu traite plus de 8 images par chargement, tu n'en traite pas plus
    Et une fois que tu en a traité 8, tu recharge la page (un meta refresh sera suffisant) et tu traite les 8 suivantes.
    Jusqu'à la fin de ton traitement.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Je ne sais pas s'il refuse ou s'il y a un timeout ou autre chose.

    Mais avec le meta refresh, ca va etre galere de reprendre à l'image ou ca c'est arreté.

    Au fait, c est pas 8 mais 9...


    en plus je ne pense pas que cela vienne de ca, car lrsque je ne créer que les miniatures, j'arrive a en faire 11.

  4. #4
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Je ne sais pas si ca peut marcher, mais il y a moyen de mettre l'execution du script durant un certain nombre de secondes en pause. Voir les fonctions :

    http://fr3.php.net/sleep
    http://fr3.php.net/manual/en/function.usleep.php

    Voir aussi peut-etre:
    http://fr3.php.net/manual/en/functio...time-limit.php

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Non, malheureusement cela ne marche pas...

  6. #6
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Tu as bien essayé de faire un traitement par lots de 4 ou 5 images et de mettre le script en pause un certain temps puis de reprendre ?

    Traitement de 4 images > Pause de 5 secondes > Reprise du traitement > Pause de 5 secondes > etc...

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    j'essaye en rajoutant ca dans le while : if($i%5==0) sleep(5);

    je te dis après


    ....


    Ca ne fonctionne pas, le sleep() est compté dans le timeout de l hebergeur.

    Donc après les 4 images crée, ca s'arrête.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    cela ne répond certainement pas à ta question, mais j'ai un petit commentaire à faire :

    les imagecreatecopyresampled etc utilisent beaucoup (vraiment beaucoup) de ressources. Et prennent beaucoup de temps, donc ta page sera très longue à charger (que tu aies mis le time limit à 0 ne change pas le temps de chargement)
    Donc je te suggère la méthode suivante (c'est celle que j'utilise) :
    contrôler si l'image miniature existe
    et la créer uniquement si elle est inexistante
    idem bien entendu pour aperçu et zoom
    L'avantage est double :
    d'une part ton code sera plus rapide (sauf la première fois)
    et le temps de chargement pareil
    et pour finir : si ton script n'exécute que 7 photos, eh bien les voilà créées, et au prochain passage ton script exécutera sept autres photos (bien sûr ce n'est pas propre, mais cela fonctionne...)

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Super !

    merci pour les conseils !

    En fait je test l'existence des fichiers comme tu me l'as expliqué avant et he met un meta refresh de 10s dans le head pour recharger la page.

    A la sortie du mon while je fais une redirection Javascript vers une autre page pour me dire que c'est fini !

    C'est un peu long, mais ca me convient parfaitement !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Upload] Uploader une image sur serveur
    Par josémaria dans le forum Langage
    Réponses: 17
    Dernier message: 30/10/2006, 22h11
  2. [Upload] Uploader des images sur mon serveur
    Par arti2004 dans le forum Langage
    Réponses: 13
    Dernier message: 12/07/2006, 11h25
  3. [Upload] Upload Taille limite
    Par dafalri dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2006, 11h01
  4. [Upload] upload taille limitée
    Par temperature dans le forum Langage
    Réponses: 17
    Dernier message: 05/05/2006, 15h18
  5. Réponses: 3
    Dernier message: 20/04/2006, 23h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo