file_put_contents ne marche pas

Eléphant du PHP | 216 Messages

25 janv. 2007, 17:43

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.

Exp9
Invité n'ayant pas de compte PHPfrance

25 janv. 2007, 17:52

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

Mammouth du PHP | 601 Messages

25 janv. 2007, 19:18

utilise la méthode traditionnel, fopen(+r);
et toute les fonction haut niveau...a
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Eléphant du PHP | 216 Messages

26 janv. 2007, 15:28

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)


ViPHP
ViPHP | 1961 Messages

26 janv. 2007, 15:59

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());
}
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 216 Messages

26 janv. 2007, 16:49

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

ViPHP
ViPHP | 1961 Messages

26 janv. 2007, 17:46

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 216 Messages

26 janv. 2007, 18:02

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.

ViPHP
ViPHP | 1961 Messages

26 janv. 2007, 18:06

Effectivement, il ne trouve pas la fonction.

Tu dois inclure le fichier qui la contient avant d'utiliser my_file_put_contents().
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 216 Messages

29 janv. 2007, 10:40

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.

ViPHP
ViPHP | 1961 Messages

29 janv. 2007, 19:35

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein