Concaténer le contenu de plusieurs fichiers !! [Résolu]

Messages postés
9
Date d'inscription
dimanche 17 février 2013
Dernière intervention
31 juillet 2013
- - Dernière réponse : safafed
Messages postés
9
Date d'inscription
dimanche 17 février 2013
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


--
Afficher la suite 

Votre réponse

5 réponses

Messages postés
23593
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
12 décembre 2018
0
Merci
Bonjour,

regardez du côté de fopen

http://www.commentcamarche.net/contents/791-php-les-fichiers
Commenter la réponse de jordane45
Messages postés
28
Date d'inscription
mardi 25 octobre 2005
Dernière intervention
8 octobre 2013
0
Merci
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;
 ?>
Commenter la réponse de nicotontige
Messages postés
9
Date d'inscription
dimanche 17 février 2013
Dernière intervention
31 juillet 2013
0
Merci
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


--
Commenter la réponse de safafed
Messages postés
28
Date d'inscription
mardi 25 octobre 2005
Dernière intervention
8 octobre 2013
0
Merci
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);
 ?>
Commenter la réponse de nicotontige
Messages postés
9
Date d'inscription
dimanche 17 février 2013
Dernière intervention
31 juillet 2013
0
Merci
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>



--
Commenter la réponse de safafed

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.