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 :

problème CRON avec archives .zip


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Par défaut problème CRON avec archives .zip
    Bonjour à tous,

    Je rencontre un problème lors de la création d'un fichier zip à partir d'un script php, lancé à partir d'une tâche CRON.
    Explication : Lorsque je planifie la création d'un fichier CSV grâce au script plannifé : tout fonctionne à merveille.
    Par contre lorsque que je rajoute ces quelques lignes pour zipper ce CSV, plus rien ne sort.
    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
    $zip = new ZipArchive(); 
    if($zip->open($sortie.$nom.'.zip', ZipArchive::CREATE) === true)
    {
    echo 'Zip ouvert<br/>';
     
    // Ajout d'un fichier
    $zip->addFile($sortie.$nom.'.csv',$nom.'.csv');
    // Et on referme l'archive
    $zip->close();
      }
      else
      {
    //    echo 'Impossible d'ouvrir &quot;Zip.zip<br/>'; (rectifié)
          echo 'ouverture impossible<br/>';
      }
    unlink ($sortie.$nom.'.csv');
    Dans Crontab :
    27 08 * * * php /kunden/homepages/4/d329817475/htdocs/site/www/wp-content/Query/Clients/Digico/query.php
    Ce que je ne comprends pas, c'est que cela fonctionne parfaitement bien en local : j'ai bien en sortie un fichier zip et mon CSV à l'intérieur. Lorsque je reprends ces mêmes scripts et je les exécute.
    Est-ce que cela proviendrait de la fonction ZipArchive ? Faut-it installer quelquechose sur mon serveur (mise à part php) ?
    Pour rappel : je rajoute "#!/usr/local/bin/php" au début de chaque script pour que mon serveur qui tourne sous Debian accepte le PHP. Je ne sais pas s'il y a un rapport avec ça.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    tu as une erreur de syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Impossible d'ouvrir Zip.zip<br/>";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Par défaut
    @Sabotage : L'erreur de syntaxe que tu m'as fait remarqué c'est à cause du copier-coller en fait, parce que dans mon script j'ai mis "' ;"(sans l'espace, ce qui me met l'appostrophe) ... Bref en rectifiant cela, ça ne change rien.

    @Madfrix : Donc d'après toi, le problème viendrait peut-être du chemin relatif de destination de création du zip ? Mais pourtant j'utilise le même principe pour créer le CSV juste avant, avec les mêmes variables.

    La création du CSV :
    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
    $sortie = "./Report/Daily_sales/";
    $nom = $file.'_'.$dayloc1.'_'.$timeloc1;
    if (!$fp = fopen($sortie.$nom.'.csv',"w+"))
    {
    	print("La requete ". $file ." n'a pu etre faite.<br>");
    	fputs($log,"La requete ". $file ." n'a pu etre faite.<br>");
    }
    else
    {
    	fseek($fp,0);
    	fputs($fp,$entete);
    	fclose($fp);
    	print("La requete ". $file ." est faite le ".$dayloc." a ".$timeloc." (heure client) et le ".$day." a ".$time." (heure serveur).<br>");
    	fputs($log,"La requete ". $file ." est faite le ".$dayloc." a ".$timeloc." (heure client) et le ".$day." a ".$time." (heure serveur).<br>");
    }

  4. #4
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    L'extension zip est il installée sur ton php ? (voir phpinfo), tu n'as pas un fichier log qui indiquerait les possibles messages d'erreurs générés par php ?

  5. #5
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Par défaut
    Effectivement, j'ai fait en sorte que lorsque la connection est établie, il l'est signalé dans un log.html.
    Ce que je remarque à partir de cela, c'est que lorsque je plannifie la tâche sans les zip (juste les CSV), ça fonctionne et dans mon log, il est marqué par exemple :
    Connection OK.
    La requete Daily_sales est faite le 10/07/26 a 18:23:00 (heure client) et le 10/07/26 a 11:23:00 (heure serveur).
    La requete Daily_order est faite le 10/07/26 a 18:23:00 (heure client) et le 10/07/26 a 11:23:00 (heure serveur).
    La requete Pos_connection_tracking est faite le 10/07/26 a 18:23:00 (heure client) et le 10/07/26 a 11:23:00 (heure serveur).
    Par contre avec le zip, dans mon log il n'y a que :
    Connection OK
    Parce qu'en fait j'ai 3 pages :
    - connect.php : les paramètres de connection
    - query.php : sert à établir la connection à la base
    - Daily_sales.php : comporte la requête, la sortie du résultat en CSV et le zip.
    Je lance le script de la page query.php, qui fait appelle au connect.php et Daily_sales.php ensuite.
    Ce qui voudrait dire que ma page Daily_sales.php n'est pas prise en compte et que cela s'arrête ou se bloque à partir de l'appel de celle-ci.

    Le contenu complet de ma page Daily_sales.php :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #!/usr/local/bin/php
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
        <head>
            <title>Daily_sales</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <body>
    <?php
     
    // Requête SQL
    $sql = "SELECT p.MagName, t.Serial, t.DateExpired, t.TrsDate, t.TrsTime, t.IdRef, d.PartName
    FROM ".$database.".tblpartdetailsarchive t
    INNER JOIN tblmagasinaddress p on t.IdMag = p.IdMag
    INNER JOIN hap_root.tblpartbrochure d on t.IdRef = d.IdRef
    WHERE TrsDate = ADDDATE($dayquery, INTERVAL -1 DAY)
    ORDER BY MagName";
     
    $file = "Daily_sales";
     
    $entete = "MagName; Serial; DateExpired; TrsDate; TrsTime; IdRef; PartName";
     
    // Titre des colonnes de votre fichier .CSV ou .XLS
    $entete .= "\n";
     
    if (!$req = mysql_query($sql))
    {
    	print("Erreur SQL pour la requete ". $file.".<br>");
    	fputs($log,"Erreur SQL pour la requete ". $file.".<br>");
    }
    else
    {
    // Enregistrement des résultats ligne par ligne
    while($row = mysql_fetch_object($req))
    {
       $entete .= "".$row->MagName." ;'".$row->Serial." ; ".$row->DateExpired." ; ".$row->TrsDate." ; ".$row->TrsTime." ; ".$row->IdRef." ; ".$row->PartName."\n";
    }
     
    // Déclaration dus type de contenu
    $sortie = "./Report/Daily_sales/";
    $nom = $file.'_'.$dayloc1.'_'.$timeloc1;
    if (!$fp = fopen($sortie.$nom.'.csv',"w+"))
    {
    	print("La requete ". $file ." n'a pu etre faite.<br>");
    	fputs($log,"La requete ". $file ." n'a pu etre faite.<br>");
    }
    else
    {
    	fseek($fp,0);
    	fputs($fp,$entete);
    	fclose($fp);
    	print("La requete ". $file ." est faite le ".$dayloc." a ".$timeloc." (heure client) et le ".$day." a ".$time." (heure serveur).<br>");
    	fputs($log,"La requete ". $file ." est faite le ".$dayloc." a ".$timeloc." (heure client) et le ".$day." a ".$time." (heure serveur).<br>");
    }
     
    }
     
    $zip = new ZipArchive(); 
    if($zip->open($sortie.$nom.'.zip', ZipArchive::CREATE) === true)
    {
    echo 'Zip ouvert<br/>';
     
    // Ajout d'un fichier
    $zip->addFile($sortie.$nom.'.csv',$nom.'.csv');
    // Et on referme l'archive
    $zip->close();
      }
      else
      {
        echo 'Ouverture impossible<br/>';
      }
    unlink ($sortie.$nom.'.csv');
    ?>
        </body>
    </html>
    @Thes32 : En fait, mon serveur est un seveur de location hébergé aux USA, ce qui fait que je ne peux rien installer dessus. Dans le php.ini du serveur il est marqué :
    ZLib Support enabled
    Stream Wrapper support compress.zlib://
    Stream Filter support zlib.inflate, zlib.deflate
    Ce qui voudrait dire qu'il devrait comprendre l'extension zip et la fonction ZipArchive() non ?

    EDIT : Grande nouvelle (je l'espère)
    Dans mon crontab, je mets ">>/tmp/mybackup.log" à la fin de chaque ligne pour avoir le log du cron et j'obtiens :
    <b>Parse error</b>: syntax error, unexpected ')', expecting '(' in <b>/homepages/4/d329817475/htdocs/site/www/wp-content/Query/Sources/Daily_sales.php</b> on line <b>60</b><br />
    Une erreur de parenthèse à la ligne 60 apparemment, donc à partir du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($zip->open($sortie.$nom.'.zip', ZipArchive::CREATE) === true)
    Pourtant j'ai bien refermé les parenthèses... Le problème proviendrait-il d'un problème de lecture du script par le serveur ?

  6. #6
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par siuol77 Voir le message

    @Thes32 : En fait, mon serveur est un seveur de location hébergé aux USA, ce qui fait que je ne peux rien installer dessus. Dans le php.ini du serveur il est marqué :
    Ce qui voudrait dire qu'il devrait comprendre l'extension zip et la fonction ZipArchive() non ?
    J'ai parlé de zip et non zlib, ce sont deux extensions distinctes.

  7. #7
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    ne serait ce pas du à l'utilisation de références telles que $_SERVER['DOCUMENT_ROOT'] ou autres rajoutant des / ou non à la fin de l'url si on est sous windows ou non ?

    EDIT: problème trouvé à priori
    Mais ca devait pas tourner rond sous windows non plus...

Discussions similaires

  1. Plusieurs problèmes avec copie d'archives zip
    Par mithrendil dans le forum C#
    Réponses: 3
    Dernier message: 27/06/2010, 22h46
  2. Envoi d'archive Zip avec smtplib
    Par narke dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 25/03/2009, 11h39
  3. [unzip] Problème pour décompresser une archive zip
    Par lammouch dans le forum MATLAB
    Réponses: 11
    Dernier message: 03/04/2008, 17h56
  4. Ouvrir les archive zip avec l'explorateur windows
    Par koKoTis dans le forum Windows XP
    Réponses: 2
    Dernier message: 20/08/2006, 23h17
  5. [Zip] Problème de création d'archives (Zip.lib.php)
    Par BOUHAMOU dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 24/04/2006, 12h51

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