[PHP] travail sur des fichiers

Fermé
Rémy - 17 avril 2008 à 16:32
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 - 17 avril 2008 à 23:46
Bonjour tout le monde,

J'ai un intranet avec une grosse base de données. Je crée actuellement un site internet et j'ai besoin régulièrement d'informations de ma base de données d'intranet.
Mon idée : Extraire un fichier texte avec les infos nécessaires. L'importer sur ma base de données internet.

Voici un bout de code :

Je précise que j'ai 100 tables intitulées fiche1, fiche2, etc...

for($i=1;$i<=100;$i++)//objectif : créer un fichier texte par table 'ficheX'. A chaque réitération, on copie le contenu du fichier dans la variable $contenu. Puis on copie le contenu de cette variable dans un fichier .txt exploitable côté serveur (internet)
	{
		$fiche="fiche".$i;
		$req=mysql_query("SELECT * FROM $fiche;");
		$rep=mysql_fetch_array($req);
		if($rep[0]!=""){
			mysql_query("SELECT * FROM $fiche WHERE selectionPourInternet=\"1\" INTO OUTFILE \"result.txt\";");
			$filename="C:\\Program Files\\EasyPHP\\mysql\\data\\david\\result.txt";
			$handle = fopen($filename, "r");
			$contents = fread($handle, filesize($filename));
			$contenu .= $contents;
			fclose($handle);
		}
                	unlink($filename);//???????
	}

 $Fnm = "chemin\resultTotal.txt";
 $inF = fopen($Fnm,"w"); 
 fwrite($inF,$contenu);
 fclose($inF); 


J'ai souvent le warning suivant :
Warning: fread(): Length parameter must be greater than 0.

Je vois pas pourquoi il me dit que mon fichier est vide...

Quelqu'un pour m'éclairer svp ?
A voir également:

9 réponses

s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
17 avril 2008 à 16:35
Salut,

Pourquoi extraire un fichier ? Pourquoi ne pas générer un backup .sql avec juste les informations qu'il te faut ?
0
Impossible pour le coup. Ca doit fonctionner tout seul à l'avenir, sans intervention...
Par un clic, le commercial doit pouvoir mettre à jour le site internet.
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
17 avril 2008 à 16:41
Un flux RSS serait donc le plus approprié ?

https://ghostdogpr.developpez.com/articles/rss/

Note : la méthode peut être appliqué pour n'importe quoi, là c'est un exemple de flux, mais tu peux faire ça à ta sauce.
0
C'est vrai, j'ai déjà fait pour un autre site mais là.
J'ai environ 80 colonnes dans chaque fiche (table). Sachant que toutes ces colonnes sont différentes. Ca promet un travail de malade sur le XML à la réception...

J'avais plutôt pensé envoyer tout en dur dans un fichier texte comme un bourrin (ma spécialité :p)
J'ai déjà fait ça entre un serveur UNIX et un Windows mais ce n'était pas moi à l'origine de la création du txt. Par contre, à la réception du txt, je sais faire. C'est juste pour le créer que ça me chagrine...

Est-ce que mon
SELECT * FROM $fiche WHERE selectionPourInternet="1" INTO OUTFILE "result.txt"
est bon ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
17 avril 2008 à 16:58
Je ne sais pas, je ne connais pas cette requête. Mais c'est simple, tu fais la requête, et dans ta boucle tu concatènes :

$fichier='';
$L=1;
while()
{
  $fichier.="[LIGNE$L]"."\n".donnees[champ1].';'.donnees[champ2].';'.donnees[champ3]."\n\n"
  $L=++;
}

$fp = fopen("resultTotal.txt", 'w+');
fputs($fp, $fichier);
fclose($fp);


Après je sais pas ce que tu veux obtenir de plus.
0
M'ouais, c'était à peu près mon idée de départ. Mais c'est pas gagné parce que les champ1, champ2, champ3... sont différents dans chaque table...
Pareil, à l'exploitation du txt, ça va être un fameux sac de noeuds...

La requete INTO OUTFILE sert justement à extraire d'une bdd vers un fichier (l'avantage, c'est qu'il met des alinéas entre chaque donnée). Son opposé (pour faire l'opération inverse) est :
LOAD DATA INFILE 'monFichier.txt' INTO TABLE maTable


Si tu as des infos là-dessus...

Bon, ok, je m'y remets et te tiens au courant
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
17 avril 2008 à 17:19
"Mais c'est pas gagné parce que les champ1, champ2, champ3... sont différents dans chaque table... "

donnees[0]
donnees[1]
donnees[2]
0
Oui, merci, j'avais compris.
Je parlais du nombre de champs...
Pour certains, le max sera donnees[85], pour d'autres, donnees[125]... quoiqu'il doit y avoir un moyen de compter le nombre... Bref.
J'ai vraiment envie de suivre mon premier post en utilisant le INTO OUTFILE. Je pense que c'est pas si compliqué...
Je suis têtu désolé. J'y retourne !
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
17 avril 2008 à 23:46
Non mais c'est bien t'être têtu, moi je cherche dans ce que je connais.

Pour compter tu peux faire un count($donnees, COUNT_RECURSIVE) quelque chose dans le genre, la documentation sera plus clair.
0