Création répertoire

Eléphant du PHP | 440 Messages

20 oct. 2009, 14:56

Bonjour à tous,


j'ai script php qui doit créer des répertoires sur le serveur, mais cela bloque.


j'ai mon dossier doc_ged et c'est ici que doit être créer automatiquement les répertoires.

mon script
<?php
function IsDir_or_CreateIt($path) {
    if(is_dir($path)) {
        return true;
    } 
	else 
	{
        if(mkdir($path)) 
		{
            return true;
        } 
		else 
		{
            return false;
        };
    };
}

function creation_rep($dossierdepart)
{

		$res0 = mysql_query("SELECT id_societe, nom_societe FROM societe;");
			while($row = mysql_fetch_array($res0))
					{
					$dossier = ''.$dossierdepart.''.$row['id_societe'].'/';
							if(IsDir_or_CreateIt($dossier)) 
							{
							//echo "deja écréé==>".$dossier."<<<";
					
							} 
							else 
							{
							$old = umask(0);
							mkdir("$dossier", 777); 
							umask($old);
							//echo 'création du dossier'.$dossier.'<br/>';
							};
					
							//echo ''.$dossier.'<br/>';
					
							//echo "1";
					
							////////////////////////////////
						
							/////////////////////////
							$sql1=mysql_query("select id_type, nom_type FROM type ORDER BY nom_type");
									while($row1 = mysql_fetch_array($sql1))
									{
							
									//dossier Type
									$dossier2 = ''.$dossier.''.$row1["id_type"].'/';
									if(IsDir_or_CreateIt($dossier2)) 
									{
									echo "deja écréé==>".$dossier2."<<<<br/>";
									} 
									else 
									{
									mkdir("$dossier2", 0777); 
									echo 'création du dossier'.$dossier2.'<br/>';
									};
								
								
										////////////////////////////////////
								
										///////////////////////////////////////
									$sql1=mysql_query("select id_gamme, nom_gamme FROM gamme ORDER BY nom_gamme");
									while($row1 = mysql_fetch_array($sql1))
										{	
										$dossier3 = ''.$dossier2.''.$row1["id_gamme"].'/';
																if(IsDir_or_CreateIt($dossier3)) 
																	{
																	} 
																	else 
																	{
																	mkdir ("$dossier3", 0777); 
																	};
						
												$sql3=mysql_query("select id_sgamme, nom_sgamme FROM sgamme ORDER BY nom_sgamme");
												while($row3= mysql_fetch_array($sql3))
													{	
																				$dossier4 = ''.$dossier3.''.$row3["id_sgamme"].'/';
																				if(IsDir_or_CreateIt($dossier4)) 
																					{
																					} 
																					else 
																					{
																					mkdir ("$dossier4", 0777); 
																					};
													
													}
										}


							}
					}
}	
?>

Le problème ce situe sur la création des dossiers sur les enregistrement de ma base de l'élement type.

Le script doit créer le dossier "société" puis dedans les dossiers "type" dans ce même dossier (/société/type)gamme et encore dedans le dossier sgamme.

Dans ma base j'ai deux enregistrement (donc normalement 2 repetoires à créer) il va me créer le premier pas le second,

Si j'enleve dans le script les bout de code pour créer les repertoire gamme et sous gamme, la il me créer bien le second repertoire.


Quel erreurs est-je commis? Quel oublie?

Merci

guigui69

Mammouth du PHP | 985 Messages

20 oct. 2009, 15:25

Se sera plus efficace en utilisant la fonction chdir().

Exemple (en reprenant une partie de ton script):
function Create_dir($path) {
    if(chdir($path)) {
       echo 'déjà créé==>' . $path . '<<<<br/>';
    }
    else {
       if(mkdir($path)) {
            echo 'création du dossier' . $path . '<br/>';
       }
       else {
            echo 'Echec de la création du dossier';
       }
    }
}
Create_dir($dossier);
Il faut ensuite adapter le reste de ton script suivant l'exemple...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 440 Messages

20 oct. 2009, 16:46

Merci pour la réponse,

je vais regarder, mon code a-t-il une erreur? Je ne comprend pas pourquoi il ne créer les répertoires au deuxième niveau.

guigui69

ViPHP
fab
ViPHP | 2657 Messages

20 oct. 2009, 17:54

Car mkdir n'est pas récursif par défaut! Il a un paramètre pour ça :
mkdir($path,0777,true);
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 440 Messages

21 oct. 2009, 09:54

Merci je pense avoir trouver le problème j'ai appelé 2 fois $row1 pour 2 requetes.


J'ai une autre question j'ai besoin d'effectuer un déplacement de dossier j'ai utiliser la fonction rename() mais il me retourne une erreur
Warning: rename(../../doc_ged_enr/1/1/1/1/1,../../doc_ged_enr/2/2/2/2/) [function.rename]: Permission denied in /var/www/ged/v0.1a/modif_ged3.php on line 129
il me dit que je n'ai pas les autorisation alors que les droit accès sont attribuée à l'utilisateur apache (www-data) de tout le dossier et fichier.

Faut-il que je rajout un / à la fin de ../../doc_ged_enr/1/1/1/1/1 ? notion de récursivité?

Merci

guigui69