Page 1 sur 1

file_put_contents ne marche pas

Posté : 25 janv. 2007, 17:43
par sam01
Bonjour,

j'aimerais écrire le résultat du code suivant dans un fichier horodaté (avec heure et date du jour)

function mysql_structure() {
 include ('connect.php');
 $base = 'lldiffusion';
 
  
  $tables = mysql_list_tables($base);
  while ($donnees = mysql_fetch_array($tables))
    {
    $table = $donnees[0];
    $res = mysql_query("SHOW CREATE TABLE $table");
    if ($res)
      {
      $insertions = "";
      $tableau = mysql_fetch_array($res);
      $tableau[1] .= ";";
      $dumpsql[] = str_replace("\n", "", $tableau[1]);
      $req_table = mysql_query("SELECT * FROM $table");
      $nbr_champs = mysql_num_fields($req_table);
      while ($ligne = mysql_fetch_array($req_table))
        {
        $insertions .= "INSERT INTO $table VALUES(";
        for ($i=0; $i<=$nbr_champs-1; $i++)
          {
          $insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
          }
        $insertions = substr($insertions, 0, -2);
        $insertions .= ");\n";
        }
      if ($insertions != "")
        {
        $dumpsql[] = $insertions;
        }
      }
    }
  return implode("\r", $dumpsql);
  }

le souci c'est que je ne peux pas utiliser le code suivant qui est toléré uniquement à partir de la version 5

echo "Taille du fichier : " . file_put_contents("sqldump-".$base."-".date("Ymd-His").".sql", mysql_structure());



je suis en php 4.4.4

pouvez-vous m'aider pour que je puisse faire l'équivalent avec ma version?

Merci d'avance.

Posté : 25 janv. 2007, 17:52
par Exp9
J'utilise ca pour php <5:

Code : Tout sélectionner

if(!function_exists('file_put_contents')) { function file_put_contents($filename, $data, $file_append = false) { $fp = fopen($filename, (!$file_append ? 'w+' : 'a+')); if(!$fp) { trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR); return; } fputs($fp, $data); fclose($fp); } }
Source: http://developpeur.journaldunet.com/tut ... ents.shtml

Posté : 25 janv. 2007, 19:18
par artotal
utilise la méthode traditionnel, fopen(+r);
et toute les fonction haut niveau...a

Posté : 26 janv. 2007, 15:28
par sam01
j'ai adapté le code

	if(!function_exists('file_put_contents')) 
	{
 		function file_put_contents("sqldump-".$base."-".date("Ymd-His").".sql", mysql_structure(), $file_append = false)
		{
  			$fp = fopen("sqldump-".$base."-".date("Ymd-His").".sql", (!$file_append ? 'w+' : 'a+'));
  				if(!$fp)
				{
   					trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR);
   					return;
  				}
  			fputs($fp, mysql_structure());
  			fclose($fp);
 		}
	}

mias j'ai l'erreur suivante Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' sur cette ligne :

 		function file_put_contents("sqldump-".$base."-".date("Ymd-His").".sql", mysql_structure(), $file_append = false)


Posté : 26 janv. 2007, 15:59
par Ajoloca
Bonjour,

Personnellement je te déconseille de donner à tes fonctions le nom des fonctions PHP.
Je procèderai de la manière suivante
function my_file_put_contents($fileName, $data, $file_append = false) {
   $fp = fopen($fileName, (!$file_append ? 'w+' : 'a+'));
   if(!$fp) {
      trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR);
      return;
   }
   fputs($fp, $data);
   fclose($fp); 
}

$fileName = "sqldump-".$base."-".date("Ymd-His").".sql";

if(!function_exists('file_put_contents')) {
   my_file_put_contents($fileName, mysql_structure(), $file_append = false);
}
else {
   file_put_contents($fileName, mysql_structure());
}

Posté : 26 janv. 2007, 16:49
par sam01
voici l'erreur que j'ai :

Fatal error: Call to undefined function: mysql_structure() in /home.10.3/lldiffus/www/gerant_new.php on line 105

au niveau de cette ligne :



	if(!function_exists('file_put_contents'))
	{
   		my_file_put_contents($fileName, mysql_structure(), $file_append = false);
	}

est-ce qu(il faut que ma fonction mysql_structure()
soit dans la focntion : my_file_put_contents

Posté : 26 janv. 2007, 17:46
par Ajoloca
Re,

Je ne sais pas ce que fait ta fonction mysql_structure().

Comme tu l'as placée elle est sensée retourner une chaine de caractères (celle que tu veux écrire dans le fichier).

Et doit être appelée au moment de l'appel de my_file_put_contents comme paramètre, pas dans la fonction elle même.

Posté : 26 janv. 2007, 18:02
par sam01
c'est pourtant ce que je fais :

if(!function_exists('file_put_contents'))
    {
           my_file_put_contents($fileName, mysql_structure(), $file_append = false);
    } 

voic mon code en entier

function mysql_structure() {
 include ('connect.php');
 $base = 'lldiffusion';

  
  $tables = mysql_list_tables($base);
  while ($donnees = mysql_fetch_array($tables))
    {
    $table = $donnees[0];
    $res = mysql_query("SHOW CREATE TABLE $table");
    if ($res)
      {
      $insertions = "";
      $tableau = mysql_fetch_array($res);
      $tableau[1] .= ";";
      $dumpsql[] = str_replace("\n", "", $tableau[1]);
      $req_table = mysql_query("SELECT * FROM $table");
      $nbr_champs = mysql_num_fields($req_table);
      while ($ligne = mysql_fetch_array($req_table))
        {
        $insertions .= "INSERT INTO $table VALUES(";
        for ($i=0; $i<=$nbr_champs-1; $i++)
          {
          $insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
          }
        $insertions = substr($insertions, 0, -2);
        $insertions .= ");\n";
        }
      if ($insertions != "")
        {
        $dumpsql[] = $insertions;
        }
      }
    }
  return implode("\r", $dumpsql);
  }



*/

if (!empty($_GET['pro']) and ($_GET['pro'] == 'sauv'))
{



	function my_file_put_contents($fileName, $data, $file_append = false)
	 {
  	 	$fp = fopen($fileName, (!$file_append ? 'w+' : 'a+'));
   			if(!$fp)
			{
     				 trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR);
      				return;
   			}
   		fputs($fp, $data);
   		fclose($fp); 
	 }

	$fileName = "sqldump-".lldiffusion."-".date("Ymd-His").".sql";

	if(!function_exists('file_put_contents'))
	{
   		my_file_put_contents($fileName, mysql_structure(), $file_append = false);
	}
	else 
	{
   		file_put_contents($fileName, mysql_structure());
	} 

}



j'ai l'impression que lors de l'appel de ma onction il ne me la trouve pas.

Posté : 26 janv. 2007, 18:06
par Ajoloca
Effectivement, il ne trouve pas la fonction.

Tu dois inclure le fichier qui la contient avant d'utiliser my_file_put_contents().

Posté : 29 janv. 2007, 10:40
par sam01
pardon mais je comprends pas.

Tout le code que j'ai fourni est dans un seul et même fichier....

donc je ne vois de quel fichier tu veux parler?

Pourrais-tu m'apporter un peu plus de précision?

Merci d'avance pour ton aide.

Posté : 29 janv. 2007, 19:35
par Ajoloca
Bonjour,

Tu utilises une fonction qui ne fait pas partie de PHP, on déduit donc que c'est une fonction utilisateur.

Comme on ne trouve pas sa définition dans le code fourni, on suppose quelle se trouve ailleurs, dans un autre fichier et c'est ce fichier qu'on te demande d'inclure.