Concaténer le contenu de plusieurs fichiers !!

Résolu
safafed Messages postés 9 Date d'inscription dimanche 17 février 2013 Statut Membre Dernière intervention 31 juillet 2013 - 30 juil. 2013 à 07:48
safafed Messages postés 9 Date d'inscription dimanche 17 février 2013 Statut Membre Dernière intervention 31 juillet 2013 - 31 juil. 2013 à 15:28
Bonjour,

En fait j'ai plusieurs fichiers .sql dans un dossier ( à chaque fois l'utilisateur me donne l'emplacement de ce dossier, donc le nombre de fichiers .sql n'est pas constant et n'est pas connu) et je voudrais savoir comment concaténer le contenu de ces fichiers .sql dans un seul fichier .sql ?

Merci d'avance


--

5 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
30 juil. 2013 à 09:42
0
nicotontige Messages postés 28 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 8 octobre 2013 2
30 juil. 2013 à 16:18
Attention, la fontion qui vérifie l'extension du fichier (SplFileInfo) ne fonctionne qu'avec php > 5.
<?php
$dirname = './dossier/';
$dir = opendir($dirname); 
$page = "";

while($file = readdir($dir)) {
	$info = new SplFileInfo($file);
	$extension = $info->getExtension();
	if($file != '.' && $file != '..' && !is_dir($dirname.$file) && $extension == "sql")
	{
		$fp = fopen($file, "r");
		while (!feof($fp)) {
			$page .= fgets($fp, 4096);
		}
	}
}

closedir($dir);

echo $page;
 ?>
0
safafed Messages postés 9 Date d'inscription dimanche 17 février 2013 Statut Membre Dernière intervention 31 juillet 2013
30 juil. 2013 à 18:27
En fait voilà ce que j ai moi :


<?php

function rollbackmanque($nom)
{
	if($dossier = opendir($nom))
	{
		$rollback = array();
		
		while(false !== ($fichier = readdir($dossier)))
		{
		
		if( $fichier !='.' && $fichier !='..') 
			{
			if(strpos($fichier,'rollback_') !== 0)
				{
			 $sql[] = 'rollback_'.$fichier;
					} 
			else 
				{
					$rollback[] = $fichier;
				}
			}
			
		}
	
		$tableau = array_diff($sql,$rollback);
		if(count($tableau) != 0)
		{
			echo '<script language="Javascript"> alert (" Il manque des rollbacks  " ); </script>'; 
			echo 'Liste des rollback manquants <br \><br \><br \>';
			var_dump( array_diff($sql,$rollback));
		}
		else 
		{
		
		if($dossier = opendir($nom))
		while(false !== ($fichier = readdir($dossier)))
		if( $fichier !='.' && $fichier !='..')

		$test = fopen("C:/wamp/www/Tests/fichierSQL.sql", "w");
		
		foreach($fichier as $value)
		fwrite($test,$value) ;
		}
		fclose($roger);
		closedir($dossier);	
	}		
  
  }
  
  ?>
  
<form action = "" method ="post">
<input type="text" name="rep">
<INPUT TYPE = submit VALUE = "VALIDER">

</div>
<?php
if(isset($_POST['rep']))    $rep=$_POST['rep'];
else      $rep="";

echo '<br /><br />';
$nb_fichier = 0;
rollbackmanque($rep) 
?></form>


ce que je cherche moi c'est donner à l utilisateur un champ dans lequel il saisi le chemin absolu de son dossier qui contient des fichiers.sql
el fait j ai deux type un fichier .sql avec son nom je ne sait pas quoi et l autre rollback_nom.sql (par exemple codesources.sql et rollback_codesources.sql) donc moi je dois vérifier si pour chaque fichier il existe son rollback sinon il lui affiche une alerte avec le nom du rollback qui manque !! ça c est déjà fait !!

mon problème maintenant c'est quand c'est vrai càd quand pour chaque fichier.sql il existe un rollback_fichier.sql je dois créer deux fichier dans un emplacement que je vais choisir : dans l un je dois concaténer le contenu des fichiers.sql et dans l'autre je dois concaténer le contenu des rollback_fichiers.sql !!
j ai essayé mais sans résultat !!

Cordialement


--
0
nicotontige Messages postés 28 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 8 octobre 2013 2
31 juil. 2013 à 11:05
je pense que tu veux un truc de la sorte :
<?php
//variable qui contient l'emplacement du dossier
$dirname = './dossier/';
//ouverture du dossier
$dir = opendir($dirname);

//tant qu'il y a des fichiers dans le dossier
while($file = readdir($dir)) {
	//fonction pour récupérer l'extension des fichiers
	$info = new SplFileInfo($file);
	//variable qui contient l'extension
	$extension = $info->getExtension();
	//si c'est un fichier, et l'extension est sql
	if($file != '.' && $file != '..' && !is_dir($dirname.$file) && $extension == "sql")
	{
		//s'il existe un fichier rollback pour ce fichier
		if (file_exists("rollback_".$file)) {
			//ouverture en écriture du fichier de concaténation des autres fichiers
			$fp_ecriture_fichier = fopen("fichier.sql", "a");
			//on ouvre le fichier trouvé
			$fp = fopen($file, "r");
			//écriture du contenu du fichier dans le fichier de concaténation
			while (!feof($fp)) {
				fwrite($fp_ecriture_fichier,fgets($fp, 4096));
			}
			//retour chariot entre chaque fichiers
			fwrite($fp_ecriture_fichier,"\n");
			//fermeture des fichiers
			fclose($fp);
			fclose($fp_ecriture_fichier);

			//ouverture en écriture du fichier rollback de concaténation des autres fichiers
			$fp_ecriture_fichier_rollback = fopen("rollback_fichier.sql", "a");
			//on ouvre le fichier rollback trouvé
			$fp = fopen("rollback_".$file, "r");
			//écriture du contenu du fichier rollback dans le fichier rollback de concaténation
			while (!feof($fp)) {
				fwrite($fp_ecriture_fichier_rollback,fgets($fp, 4096));
			}
			//retour chariot entre chaque fichiers
			fwrite($fp_ecriture_fichier_rollback,"\n");
			//fermeture des fichiers
			fclose($fp);
			fclose($fp_ecriture_fichier_rollback);
		}
	}
}
//fermeture du fichier
closedir($dir);
 ?>
0

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

Posez votre question
safafed Messages postés 9 Date d'inscription dimanche 17 février 2013 Statut Membre Dernière intervention 31 juillet 2013
31 juil. 2013 à 15:28
nicotontige nn en fait cela ne marche pas !!

sinon j'ai déjà trouvé la solution et la voilà avec option de zipper les fihiers obtenus ( si jamais quelqu'un ll'utilisera après)


<?php
function rollbackmanque($nom,$ver)
{
	if($dossier = opendir($nom))
	{
		$rollback = array();
		$tabtest = array();
		$tabtest1 = array();
		
		while(false !== ($fichier = readdir($dossier)))
		{
		
		if( $fichier !='.' && $fichier !='..') 
			{
			if(strpos($fichier,'rollback_') !== 0)
				{
			 $sqltest[]=$fichier;	
			 $sql[] = 'rollback_'.$fichier;
					} 
			else 
				{
					$rollback[] = $fichier;
				}
			}
			
		}

		
		$tableau = array_diff($sql,$rollback);
		if(count($tableau) != 0)
		{
			echo '<script language="Javascript"> alert (" Il manque des rollbacks  " ); </script>'; 
			echo 'Liste des rollback manquants <br \><br \><br \>';
			var_dump( array_diff($sql,$rollback));
		}
		else 
		{
				foreach($rollback as $value)
		$tabtest[]= $nom.'/'.$fichier.$value;
		
		
		foreach($sqltest as $val)
		$tabtest1[]= $nom.'/'.$fichier.$val;
		if($dossier = opendir($nom))
		while(false !== ($fichier = readdir($dossier)))
		if( $fichier !='.' && $fichier !='..')

		$fich_roll = fopen("C:/wamp/www/Tests/Fich_roll.sql", "w");
		$fich_sql = fopen("C:/wamp/www/Tests/Fich_sql.sql", "w");
		
		foreach($tabtest as $valeur)	
			{
				$contenu = file_get_contents($valeur);
				fwrite($fich_roll,"$contenu\r\n");
			}
		foreach($tabtest1 as $value1)
			{
				$contenu1 = file_get_contents($value1);
				fwrite($fich_sql,"$contenu1\r\n");
			}
		
		fclose($fich_roll);
		fclose($fich_sql);
		
		$aFiles = array("Fich_roll.sql","Fich_sql.sql");
		$zip = new ZipArchive();


		if($zip->open('C:\Users\Safa FEDERER\Desktop\SQL_'.$ver.'.zip', ZipArchive::CREATE) === true)
				{
					
						foreach( $aFiles as $file )
							{
								$zip->addFile( $file);
							}

			
						$zip->close();

						echo '<script language="Javascript"> alert ("Fichier zip crée ! " ); </script>' ;
				}
		else
				{
						echo ' <script language="Javascript"> alert ("Echec de la création du fichier !" ); </script>';
				}

		}
		
		closedir($dossier);	
	}		
  
  }

?>

<form action = "" method ="post">
<input type="text" name="rep">
<INPUT TYPE = submit VALUE = "VALIDER">

<?php
if(isset($_POST['rep']))    $rep=$_POST['rep'];
else      $rep="";

echo '<br /><br />';
rollbackmanque($rep,$ver) ;

?></form>



--
0
Rejoignez-nous