Forum Clubic

Probleme de boucle "pour" php

voila ben je pose mon code :


for ($i;$i<=$dernier_id;$i++){
if (file_exists("C:\Program Files\EasyPHP1-8\www\Girardot\image_autocars\image$i.jpg")){
/* crée une miniature à 1/4 */
$mini = retaille_jpeg("C:\Program Files\EasyPHP1-8\www\Girardot\image_autocars\image$i.jpg",0.10);

/* écriture dans un fichier */
 
imagejpeg($mini,"new_image_autocars\ new_image$i.jpg", 70);
}
}

$i est initialisé a 1 ainsi que les noms de mes images…le probleme est que par exemple si il manque un fichier au milieu la suite ne se fait pas…pk ?
Edité le 24/06/2008 à 11:26

Oui les erreurs php bloquent le chargement du reste. Peut etre que certains reglages pourraient te permettre de régler ce problème.
Mais la meilleur solution est de vérifier l’existence de ton fichier avant d’essayer de l’afficher…


for ($i;$i<=$dernier_id;$i++){
if (file_exists("C:\Program Files\EasyPHP1-8\www\Girardot\image_autocars\image$i.jpg")){
/* crée une miniature à 1/4 */

$mini = retaille_jpeg("C:\Program Files\EasyPHP1-8\www\Girardot\image_autocars\image$i.jpg",0.10);

/* écriture dans un fichier */
if ( file_exists('C:\Program Files\EasyPHP1-8\www\Girardot\image_autocars\image$i.jpg') )
{
imagejpeg($mini,"new_image_autocars\ new_image$i.jpg", 70);
}
}
}

J’espere que ca va marcher :slight_smile:

Déjà, il me semble que file_exists s’utilise avec des chemins de type adresse web (relatifs ou absolus), et non avec le type système.

Donc, si la racine de ton site est dans C:\Program Files\EasyPHP1-8\www, je mettrais ce chemin à ta place :


$chemin_images = "/Girardot/image_autocars/";
$chemin_new_images = "/Girardot/new_image_autocars/";

for ($i; $i <= $dernier_id; $i++)
{
          if (file_exists($chemin_images . "image " . $i . ".jpg"))
          {
                    /* crée une miniature à 1/4 */
                    $mini = retaille_jpeg($chemin_images . "image" . $i . ".jpg", 0.10);

                    /* écriture dans un fichier */
                    imagejpeg($mini, $chemin_new_images . "new_image" . $i . ".jpg", 70);
          }
}

Ceci aura l’énorme avantage de ne pas avoir à mettre des \ pour chaque \ du chemin de type Windows.


Ce que tu fais, theclear, reviens à faire 2 fois le même test même pas d'affilée, mais l'un dans l'autre... Si il est passé 1 fois, à quoi bon re-tester ? Ca serait utile si on faisait une suppression du fichier ciblé, mais ce n'est pas le cas...

Par contre, ceci pourrait être utile :


$chemin_images = "/Girardot/image_autocars/";
$chemin_new_images = "/Girardot/new_image_autocars/";

for ($i; $i <= $dernier_id; $i++)
{
          if (file_exists($chemin_images . "image " . $i . ".jpg"))
          {
                    /* crée une miniature à 1/4 */
                    $mini = retaille_jpeg($chemin_images . "image" . $i . ".jpg", 0.10);

                    if (file_exists($chemin_new_images . "image " . $i . ".jpg"))
                    {
                              $file_delete = unlink($chemin_new_images . "image " . $i . ".jpg");
                    }
                    else
                    {
                              $file_delete = true;
                    }

                    if ($file_delete)
                    {
                              /* écriture dans un fichier */
                              imagejpeg($mini, $chemin_new_images . "new_image" . $i . ".jpg", 70);
                    }
                    else
                    {
                              echo "New file already exists and deletion failed !";
                    }
          }
}

Edité le 24/06/2008 à 12:01

Et je rajouterai,si tu veux être sur de ne pas interrompre le traitement en cas d’erreur (en reprenant le code de linkovitch) :


$chemin_images = "/Girardot/image_autocars/";
$chemin_new_images = "/Girardot/new_image_autocars/";

for ($i; $i <= $dernier_id; $i++)
{
          if (file_exists($chemin_images . "image " . $i . " .jpg"))
          {
                    try
                    {
                              /* crée une miniature à 1/4 */
                              $mini = retaille_jpeg($chemin_images . "image" . $i . ".jpg", 0.10);

                              /* écriture dans un fichier */
                              imagejpeg($mini, $chemin_new_images . "new_image" . $i . ".jpg", 70);
                    }catch (Exception $e)
                    {
                              //Erreur, à toi de voir si tu veux faire quelque chose ou non
                              echo 'Erreur : ',  $e->getMessage(), "\n";
                    }          
          }
}

file_exists fonctionne avec les chemins systèmes. C’est d’ailleurs ce qu’elle vérifie en premier…

Ok Sans-Nom, je ne pensais pas. :wink:

Malgré tout, ça n’empêche pas qu’il faut mettre des doubles \ dans le chemin pour échapper le caractère d’échappement ! :stuck_out_tongue: