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 :

Manipulation de fichiers


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut Manipulation de fichiers
    Salut à tous,
    je suis en stage et, débutant en PHP, on me demande d’écrire un script PHP qui sera lancé par un planificateur de taches.

    Le but est de récupérer le données de fichiers texte vers une base de données MySQL.

    Le problème c'est que les fichiers texte sont écrits au fur et à mesure dans un dossier et ont pour nom l'année, le mois, le jour, ...les nanosecondes, donc une chaine de 23 chiffres puis l'extension .txt.

    Je dois donc créer un script qui:

    1. scanne le répertoire,
    2. ouvre un fichier par ex. 20140522105433123456789.txt
    3. traite ce fichier (en insérant les données, formées de CHAMP:VALEUR X 7, dans une table d'une base de données déjà crée)
    4. enfin qui le déplace dans un dossier (Archivés)

    5. recommence jusque à ce que le dossier soit vide.


    Panique à bord pour moi, qui débute !!

    Auriez vous des idées sur une procédure à suivre (scan du dossier, ouverture fichier, etc...) après la connexion à la base qui n'est pas trop compliquée.

    Merci beaucoup pour votre aide.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    1 : Si tu n'as pas besoin de recursivité un simple DirectoryIterator suivi d'un foreach fera l'affaire pour lister les fichiers

    2: version courte avec file_get_contents ou file_put_contents. Version plus longue mais plus flexible avec fopen ,fwrite,fread ....

    3: Pour les bases de données c'est PDO

    4 : Pour déplacer un fichier (couper) on utilise rename , copy si on veux jute une copie

    5 : Une simple boucle tant que tu as des fichiers à traiter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $liste = new DirectoryIterator('/chemin/vers/dossier/');
    foreach ($liste as $fichier) {
        if(!$fichier->isDot()) {
            // Faire 2,3,4
        }
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Je te remercie pour ton aide
    c cool

    Par contre je vais peut etre revenir vers toi pour

    Citation Envoyé par grunk Voir le message

    3: Pour les bases de données c'est PDO
    A Plus

  4. #4
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut Au fait...
    Au fait comme je traduis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!$fichier->isDot()) {
            // Faire 2,3,4
    ??????

    isDot ???
    Faire 2,3,4 ???

  5. #5
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut pas de PDO
    Mon tuteur ne veut pas de PDO pour la BDD.
    Donc il faut faire ça à l'ancienne.

    Mais comment ?

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Quoi ?
    Tu peux lui proposer mysqli à la rigueur, mais s'il t'oblige à conserver mysql_*, il serait bon qu'il explique pourquoi utiliser des fonctions obsolètes et plus maintenues depuis de nombreuses années est pédagogique !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par kilo67 Voir le message
    isDot ???
    DirectoryIterator::isDot
    Quand tu parcours un dossier, tu vas toujours récupérer le "fichier" . (qui est le dossier courant lui-même) et le "fichier" .. (qui est le dossier parent) et qu'il ne faut pas traiter.

    Pour la BDD, si c'est une base MySQL, utiliser l'API mysqli en mode procédural va beaucoup ressembler aux fonctions mysql_ d'origine, ça ne devrait pas trop perturber ton tuteur

    Pour le reste, ben faut lire quelques docs, en commençant par les liens que t'as donné grunk.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Remarque que si tu veux t'assurer que le fichier soit composé de 23 chiffres suivis de l'extension .txt tu peux le faire en une ligne avec RegexIterator combiné à DirectoryIterator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste = new RegexIterator(new DirectoryIterator($dossier),'/^[0-9]{23}\.txt$/i');
    Ainsi tu n'auras pas besoin de filtrer plus, sauf si le dossier cible peut inclure des sous dossiers dont le nom est composé de 23 nombres avec l'extension .txt. Dans ce cas tu peux filtrer une seconde fois avec isFile() pour t'assurer que tu as affaire à un fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach ($liste as $fichier) 
    {
        if($fichier->isFile()) 
       {
           // Faire 2,3,4
        }
    }
    Pour le reste il est évident qu'employer l'extension mysql_ de nos jours est vivement déconseillé. Notamment par le manuel php ici. Et concrètement l'extension mysql_ n'est plus installée par défaut dans php 5.5. Evidemment tous les hébergeurs vont l'activer pour compatibilité avec les anciens scripts mais cela donne bien le ton. Aujourd'hui c'est soit mysqli_ soit pdo.
    D'autant qu'apparemment le script que tu fais est autonome puisqu'il s'agit d'un cron, et donc pas d'excuse de compatibilité avec d'autres scripts existants

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

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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