[PHP] travail sur des fichiers

Rémy -  
s.spark Messages postés 2485 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   618
 
Salut,

Pourquoi extraire un fichier ? Pourquoi ne pas générer un backup .sql avec juste les informations qu'il te faut ?
0
Rémy
 
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   Statut Contributeur Dernière intervention   618
 
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
Rémy
 
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   Statut Contributeur Dernière intervention   618
 
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
Rémy
 
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   Statut Contributeur Dernière intervention   618
 
"Mais c'est pas gagné parce que les champ1, champ2, champ3... sont différents dans chaque table... "

donnees[0]
donnees[1]
donnees[2]
0
Rémy
 
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   Statut Contributeur Dernière intervention   618
 
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