8791 sujets

Développement web côté serveur, CMS

Bonjour;

J'ai un souci pour créer dynamiquement un fichier avec la foonction fopen et x+

Voici mon code :

  		
if (!$handle = $this->OpenFile($Path.$this->FileName,"x+"))
 {
  	echo $handle;
  	echo "Impossible de créer le fichier ".$this->FileName;
  	exit;
  }
  		
  if (fwrite($handle,$content)=== FALSE)
  {
  	echo "Impossible d'écrire dans le fichier ".$this->FileName;
  	exit;
  }  		
  echo "L'écritue dans le fichier ".$this->FileName."a réussi";
  fclose($handle);


J'ai un message me disant que le fichier est impossible à créer.

J'ai fait un test en créant un fichier vide (dans le repertoire voulu) et en remplacant x+ par w+. Dans ce cas mon fichier est bien rempli par "content".

Mais je souhaite à la fois le créer et le remplir. Pour info j'ai mis tous les droits dans le repertoire ou doit se créer le fichier. Je suis au dessus de la version php4.3.2 (il me semble qu'en dessous x+ ne fonctionne pas).

si quelqu'un a une idée

Merci !
Modérateur
Salut,

Quand on peut faire simple...


$mon_fichier=fopen("fichier.txt","w+");
if (!$mon_fichier){
  echo "Erreur d'ouverture du fichier";
}

//ecrire :
fwrite($mon_fichier,"mon texte que j'écris dans ce fichier");

//fermeture
fclose($mon_fichier);
//lire :
$mon_fichier=fopen("fichier.txt","r+");
$ma_lecture=fread($mon_fichier,filesize("fichier.txt"));
echo nl2br($ma_lecture);
fclose($mon_fichier);

Ce code est fait de tete, il se peut qu'il ait des coquilles.

@+
Modifié par Nolem (09 Apr 2008 - 16:24)
Il me semble que w+ permet d'ouvrir un fichier et non de le créer (tu le mets toi même en message d'erreur). Donc ma question est simple peut on créer un fichier dynmaiquement ?
Administrateur
"w" ou "w+" créent le fichier s'il n'existe pas.
En cas d'erreur, il faut regarder du côté des permissions du répertoire et de l'exécution du script.
Ok, j'ai mis w+ (ou w ) mais ca ne marche pas . Je n'ai pas spécifié de répertoire afin que le fichier soit à la racine mais ca ne marche pas. Je fais ca en local sur ma machine. .. quel test peut on effectuer pour voir ce qui ne marche pas ?
Modérateur
Salut,

Le mieux est que tu mettes sur le forum ton code complet. Normalement, ce que j'ai écris est correct.

Par exemple pour tester :


$mon_fichier=fopen("fichier.txt","w+");

//test de création et d'ouverture de fichier
echo $mon_fichier;
//affiche ressource sinon affiche rien


++
Modifié par Nolem (10 Apr 2008 - 19:30)
ok, voici mon code

Instanciation de l'objet file et fonction permettant de creer le fichier
  function File($FileName)
  {
  	$this->FileName = $FileName;  
  }


Fonction creant le fichier :

  function WriteInFile($Path,$content)
  {
  	// fonction permettant de créer et d'écrire dans un fichier
  	// $FileName : nom du fichier
  	// $Path : répertoire
  	// $content : contenu
  	echo $Path.$this->FileName;  	

  		if (!$handle = $this->OpenFile($Path.$this->FileName,"w+"))
  		{
  			echo $handle; 
  			echo "Impossible de créer le fichier ".$this->FileName;
  			exit;
  		}
  		
  		if (fwrite($handle,$content)=== FALSE)
  		{
  			echo "Impossible d'écrire dans le fichier ".$this->FileName;
  			exit;
  		}  	
  			
  		echo "L'écritue dans le fichier ".$this->FileName."a réussi";
  		fclose($handle);  		

  }


Creation de l'objet et appel de la fonction dans mon code principal :

 	
$file = new File("PieSpeedLimit.html");
$file->WriteInFile("",$html);


Dans ce cas je ne precise pas de répertoire, le fichier devrait etre cree a la racine. $html est le contenu de mon fichier.

Merci
Modifié par mcdelay (16 Apr 2008 - 09:54)
finalement c'est bon j'ai trouvé mon erreur, dans une de mes classes j'avais mis une condition sur l'existance du fichier... que j'ai supprimé !

Merci encore et désolé du dérangement...
Modifié par mcdelay (16 Apr 2008 - 10:06)