1. #1
    Membre à l'essai
    Homme Profil pro
    intégrateur
    Inscrit en
    janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : intégrateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : janvier 2015
    Messages : 14
    Points : 11
    Points
    11

    Par défaut impossible décrire dans un fichier en php

    Bonjour,

    je crée un fichier depuis mon code en php et ensuite je souhaite écrire dans ce fichier le résultat d'une requête sql. Mon fichier reste désespérant vide. J'ai l'impression que c'est un problème de droit sur le fichier qui à été créer par www-data. Du coup, j'ai mis www-data dans mon groupe utilisateur qui est aussi dans le groupe root mais sans succès. Même si j’essaye d'écrire à la main dans ce fichier créer par www-data.

    voici mon environnement:
    - Ubuntu 12.04 LTS
    - php 5.3.10
    - apache 2.2.22

    voici le code pour la création du fichier et son "remplissage"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $fp = fopen( $file, 'w+');
    ...
    while( $row =  $reponse->fetch()){
    				fwrite( $fp, "test dans la boucle while");
     
    			}
     
    			fwrite( $fp, "test en dehors de la boucle while");

    quelqu'un à déjà rencontrer ce problème?

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

    Informations forums :
    Inscription : juillet 2005
    Messages : 27 585
    Points : 40 957
    Points
    40 957

    Par défaut

    Ton fichier est créé par www-data mais c'est aussi www-data qui veut écrire dedans.
    S'il y avait un problème de droits, tu aurais une erreur ... consulte peut être ton log d'erreurs.

    As-tu fais un test basique ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $fp = fopen('unfichier.txt', 'w+');
    fwrite( $fp, "test");
    fclose($fp);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    intégrateur
    Inscrit en
    janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : intégrateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : janvier 2015
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    Merci pour ta réponse sabotage

    oui si je fait ce simple test je peux écrire dans le fichier. Mais pourtant dans mon exemple si ma réponse (qui est une requête sql) est null je ne parcours pas ma liste mais je dois quand même écrire dans mon fichier : fwrite( $fp, "test en dehors de la boucle while");

  4. #4
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    9 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 9 377
    Points : 18 635
    Points
    18 635

    Par défaut

    Bonjour,

    Comme tu ne montres qu'un extrait "choisi" de ton code... que dire de plus ? ...
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  5. #5
    Membre à l'essai
    Homme Profil pro
    intégrateur
    Inscrit en
    janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : intégrateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : janvier 2015
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    ok voici le code complet

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
                    ini_set('display_errors', true);
    		error_reporting(E_ALL);
     
     
    	//if(ISSET($_POST['listSource']) AND ISSET($_POST['listTable']) AND ISSET($_POST['listData']) AND ISSET($_POST['start']) AND ISSET('stop'))	{
    		$listSupervision = $_POST['listSupervision'];
    		$listZone = $_POST['listZone'];
    		$listData = $_POST['listData'];
    		$startDate = $_POST['startDate'];
    		$stopDate = $_POST['stopDate'];
    		$startHeure = $_POST['startHeure'];
    		$stopHeure = $_POST['stopHeure'];
    		$resolution = $_POST['resolution'];
    		$mode = $_POST['mode'];
    		$version = $_POST['version'];
    		$file = $_POST['file'];
    		$wwResolution = 0;
    		$reponse = "";
    		//$test = false;
     
    		$fp = fopen( "$file", 'w+');
     
    		$fp2 = fopen('unfichier.csv', 'w+');
    		fwrite( $fp2, "test");
    		fclose($fp2);
     
    		switch ( $resolution){
    			case "seconde":
    				$wwResolution = 1000;
    				break;
    			case "minute":
    				$wwResolution = 60*1000;
    				break;
    			case "heure":
    				$wwResolution = 60*1000*60;
    				break;
    			case "jour":
    				$wwResolution = 60*1000*60*24;
    				break;
    			default:
     
    		}
     
    		$start = $startDate . " " . $startHeure;
    		$stop = $stopDate . " " . $stopHeure;
     
    		if( $listZone=="Sige" ){
     
    			try{
    				$bdd = new PDO('odbc:driver=freetds;servername=mssql;dabase=Runtime', 'xxx','xxx');
    				$reponse = $bdd->query('SELECT DateTime=convert(nvarchar, DateTime, 20),TagName,Value FROM Runtime.dbo.History WHERE Runtime.dbo.History.TagName LIKE '. "PLB_AUXI_183_BF_183_01.Debit" .' AND wwResolution=1000 AND  wwRetrievalMode='."average".'  AND  wwVersion='."latest".'  AND DateTime>='."2017-30-03 08:00:00".'  AND DateTime<='."2017-31-03 08:00:00".';  ');
    				echo '<p>'.$reponse.'</p>';
    			} catch( Exception $e){
    				print $e;
     
     
    			}
     
     
     
    			$reponse->setFetchMode(PDO::FETCH_ASSOC);
     
     
    			while( $row =  $reponse->fetch()){
    				//print '<p>'.$row['TagName'].'</p>';
                                    //fputcsv( $fp, $row);
    				fwrite( $fp, "test dans la boucle while");
     
    			}
     
    			fwrite( $fp, "test en dehors de la boucle while");
     
    		} else if( $listZone=="Abels"){
     
    			try{
    				$bdd = new PDO('mysql:host=localhost;dbname=sige_export;charset=utf8', 'xxx','xxx');
    				$reponse = $bdd->query('SELECT * FROM data_SMP0  order by id asc limit 10');
     
    			} catch( Exception $e){
    				print $e;
     
    			}
     
     
     
    			$reponse->setFetchMode(PDO::FETCH_ASSOC);
     
     
    			while( $row =  $reponse->fetch()){
    				fputcsv( $fp, $row);
     
    			}
     
    		}
     
     
    		fclose($fp);
     
    		$id = session_id();
    		//$n_id = $_SESSION['xxx'];
     
    		//print '<p>session id: ' . $n_id . '</p>';
     
    		sleep(30);
     
    		header('Refresh:2;/config/export_file_csv.php?id=' . $id);
     
     
    ?>
    le but est l'export de données qui peuvent venir de 2 bases de données différentes et d'écrire le résultat dans un fichier csv. Le code est en test il n'est pas terminé, pour l'instant je me concentre sur la première base de données qui est une base de données temps réel ce qui explique les paramètres supplémentaires.

    merci pour votre aide

  6. #6
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    9 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 9 377
    Points : 18 635
    Points
    18 635

    Par défaut

    Bon.

    1/ On constate :
    • aucune gestion d'erreur (les $_POST ne sont pas vérifiés, ni $file, ni $listZone par exemple)
    • aucun test de réussite des requêtes ( if($reponse){ ... } )




    2/ On suppose que tu as fait TOUT le DEBOGAGE de base ?

    • vérifié les variables ? (var_dump($_POST); echo $variable; ...)
    • vérifé les requêtes ? (dans PHPmyadmin, par exemple)
    • mis des echo 'OK'; dans le code, pour voir s'il passait bien aux endroits voulus (dans les if(...), les while(...),...)
    • ...


    Oui ? Non ?
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  7. #7
    Membre à l'essai
    Homme Profil pro
    intégrateur
    Inscrit en
    janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : intégrateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : janvier 2015
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    merci pour ta réponse jreaux62,

    mais j'ai bien précisé qu'il s'agissait d'un code de test, si tu regardes la requête sql tu verras que les paramètres sont écrit en dure pour l'instant, au début du code tu peux voire que ISSET est en commentaire pour l'instant pour isoler mon problème.

    mais puisque que tu en parles oui j'avais bien vérifié que tous les paramètres passez en POST était disponible (avec l'outil de développement web dans firefox on voit bien la requête et les paramètres). Par contre, au sujet de ma requête sql je n'arrive pas à vérifier si elle me retourne bien quelques choses en tout cas si je test la même directement sur mon serveur sql server 2012 elle fonctionne correctement.

  8. #8
    Membre à l'essai
    Homme Profil pro
    intégrateur
    Inscrit en
    janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : intégrateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : janvier 2015
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    j'ai testé la requête sql,

    $response est soit un tableau si tous c'est bien passé soit false si un problème est survenu. Dans mon cas c'est bien un tableau.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/02/2015, 10h29
  2. Recherche dans un fichier impossible enregistré dans un fichier
    Par cdjkhdjlhxjklnjskznj dans le forum Langage
    Réponses: 19
    Dernier message: 03/12/2014, 00h09
  3. formulaire de recherche dans un fichier XML php
    Par oualid4ever dans le forum SimpleXML
    Réponses: 1
    Dernier message: 20/01/2013, 09h54
  4. Injection php dans le fichier index.php
    Par heretik25 dans le forum PHP & MySQL
    Réponses: 8
    Dernier message: 01/04/2012, 16h08
  5. Réponses: 3
    Dernier message: 03/08/2011, 15h06

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