8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je suis encore une fois coincé... J'ai des anciennes bases MySql dont je voudrai me servir. Elles ont été sauvegardées, bases et tables, dans des fichiers *.txt réunis dans le même répertoire.

Pour éviter de tout transférer à la main, j'ai voulu réaliser un petit script rapide qui le fait automatiquement : on définit le répertoire. Il lit ce répertoire et ouvre chaque fichier. Par fichier, il lit chaque ligne (qui est une instruction MySql) et, avec un query, il charge la table. Simple comme tout.

Parfois il fonctionne, mais pas longtemps, et parfois il refuse en me mettant :

" Warning: file(.): failed to open stream: Permission denied in d:\easyphp1-8\www\whombat\charge_tables.php on line 16 "

C'est la ligne : $fich = file($files); Bien sur il précise que du coup la variable each() n'est pas valable et que Query est vide.
Les fichiers n'ont pas de blocage particuliers, la preuve parfois il les ouvre. Alors... No sé...

Je vous mets mon script, au cas ou...

<?php

function cherge_bdd($dir)      {

	require('..\config\conf.php');  // pour les données $serveur, $user, etc...

	chdir($dir);   // $dir est une variable déjà définie, c'est un répertoire de fichiers de données à entrer sur la bdd

	$cnx = mysql_connect($serveur, $user, $passwd); 
	mysql_select_db($bdd, $cnx); 	

	$fp = opendir($dir);

	while ($file = readdir($fp))      {

		$fich = file($file);
		$nb=count($fich); 

		for ($i=0; $i<=$nb; $i++)	{

			list( $num, $ligne ) = each( $fich );
			$instruction = trim($ligne);

    			mysql_query($instruction) or die(mysql_error());
 		}
	}


	mysql_close();
}

?>

Merci par avance de votre avis.

Cordialement.
Bonjour,

Il faut que tu prenne en compte le fait que readdir() va également retourner les répertoires '.' et '..' correspondants respectivement au répertoire courant et au répertoire parent.
D'une manière plus générale il faut éviter de lire les répértoire. Tu peux donc ajouter quelque chose comme ça au début de ta boucle:
if(!is_file($file)) continue;



PS: pour parcourir un tableau il existe une manière plus simple de procéder: foreach() {}. Le code devient:
$fich = file($file);

foreach($fich as $ligne) {
	$instruction = trim($ligne);
	mysql_query($instruction) or die(mysql_error());
}



PS2: la syntax correct pour lire un répertoire est:
while (($file = readdir($fp)) !== false){}

Sans quoi un fichier appelé "0" fera stopper la boucle.
Modifié par Necromantik (20 Oct 2007 - 13:12)
J'étais dur l'ordi toute la nuit alors j'ai dormi un peu...
Je viens de me réveiller et j'ai lu votre post. Je vais manger un bout et je vais essayer.
Vous m'avez donné plein de pistes et je vous en remercie chaleureusement.
Cordialement.