IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

ecrire dans un fichier


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Par défaut ecrire dans un fichier
    Bonjour à tous !

    Alors voilà je vous explique ma requête

    Je suis en train de développer un petit script pour un cms et c'est l'installation qui me pose problème. En effet je souhaiterais via un fichier d'install que les fonction d'upload par défaut de tous les modules du cms soient remplacées par un include tout bête qui inclura a la place ma nouvelle fonction d'upload.

    Pour cela j'ai réalisé le script suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    $ncontent = '<?php balibalo("nk_secure/function_upload.php"); ?>';
    $ncontent = str_replace("balibalo","include", $ncontent);
     
    if (file_exists("nuked.php"))
    {
    	$handle = opendir("modules");
     
    	while ($module = readdir($handle))
    	{
    		$path = "modules/" . $module . "/index.php";
     
    			if (file_exists($path))
    			{
    				chmod ($path, 0777);
     
    				if (is_writable($path))
    				{	
    					$fp = fopen($path, "w");
    					fwrite($fp, $ncontent);
    					fclose($fp);
     
    					echo "Module " . $module . " patché avec succès !<br />";
    				}
    				else
    				{
    					echo "Erreur lors de l'écriture dans le fichier index.php du module " . $module . " !<br />";
    				}
     
    				chmod ($path, 0644);
    			}
    			else
    			{
    			echo "Le fichier index.php du module " . $module . " est mal installé<br />";
    			}
    	}
     
    	closedir($handle);
     
    	unlink("install.php");
    }
    else
    {
    	echo "Vous devez placer install.php à coté de nuked.php !";
    }
    Mon problème est que au lieu de remplacer tout le contenu de $path j'aimerais y remplacer seulement les lignes x à y et c'est pour cela que je demande votre aide afin de trouver un moyen pour effectuer le remplacement des lignes x à y par $ncontent (x et y etant les numeros des lignes).

    Merci de votre réponse et a bientot !

  2. #2
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    a vu de nez, je dirai plutot que ce serait bien d'éffacer d'abord les lignes x à y, ou de les lire et de les stocker dans un variable, de stocker les nouvelles lignes toujours dans la variable et a la fin de réécrire le fichier.

    en gros tu prend tu supprimes le fichier tu le réécris. parce que sinon tu vas t'emmeler je trouve.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Par défaut
    Eu... ouai sinon meme ce qui serait cool c'est de rechercher dans le fichier un bout de code php et de le remplacer par mon include...
    Et ce quelque soit la ligne ou il se trouve. Je sais faire un remplacement tout bête via str_replace() mais dans ce cas il faudrait pouvoir remplacer carrement tout un bout de code contenant sauts de lignes et php. Malheureusement je ne sais pas comment m'y prendre.

    Donc je suis preneur d'exemples soit via la solution que tu m'a donné soit via celle que je vien de donner. De toute facon dans les 2 cas je ne vois pas trop comment faire...

  4. #4
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    et bien si la portion à remplacer est toujours la même ça ne devrait pas poser de problèmes. Je ne sais pas s'il vaut mieux faire un str_replace() ou un preg_replace() (bien que j'opterais plus pour la 2e solution).

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Par défaut
    J'ai suivi ton conseil du preg_replace() et j'ai refais un peu mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    <?php
    $content = '
    <?php
    	$filename = "' . $_FILES['fichiernom']['name'] . '";
    	$filesize = "' . $_FILES['fichiernom']['size'] . '";
    	
    	if ($filename != "" && $filesize <= 100000)
    	{	
                $f = explode(".", $filename);
                $end = count($f) - 1;
                $ext = $f[$end];
    
                if ($ext == "jpg" || $ext == "jpeg" || $ext == "JPG" || $ext == "JPEG" || $ext == "gif" || $ext == "GIF" || $ext == "png" || $ext == "PNG")
                {
    		$url_avatar = "upload/User/" . time() . "." . $ext;
    		move_uploaded_file("' . $_FILES['fichiernom']['tmp_name'] . '", $url_avatar) or die ("<br /><br /><div style=\"text-align: center;\"><b>Upload file failed !!!</b></div><br /><br />");
    		@chmod ($url_avatar, 0644);
                }
                else
                {
    		bliblibli "<br /><br /><div style=\"text-align: center;\">" . _BADFILEFORMAT . "</div><br /><br />";
    		redirect("index.php?file=User&op=edit_account", 5);
    		closetable();
    		footer();
    		exit();
                }	
    
    	}
    	else if ($filename != "")
    	{
    		bliblibli "<br /><br /><div style=\"text-align: center;\">" . _FILETOOBIG . "</div><br /><br />";
    		redirect("index.php?file=User&op=edit_account", 5);
    		closetable();
    		footer();
    		exit();
    	}
    	else if ($avatar != "")
    	{
                $ext = strrchr($avatar, '.');
                $ext = substr($ext, 1);
    
                if (!eregi(".php", $avatar) && !eregi(".htm", $avatar) && (eregi("jpg", $ext) || eregi("jpeg", $ext) || eregi("gif", $ext) || eregi("png", $ext)))
                {
    		$url_avatar=$avatar;
                }
                else
                {
    		bliblibli "<br /><br /><div style=\"text-align: center;\">" . _BADFILEFORMAT . "</div><br /><br />";
    		redirect("index.php?file=User&op=edit_account", 5);
    		closetable();
    		footer();
    		exit();
                }
    	}
    	else
    	{
                $url_avatar = "";
    	}
    ?>';
    $content = str_replace("bliblibli","echo", $content);
     
    $ncontent = '<?php balibalo("nk_secure/function_upload.php"); ?>';
    $ncontent = str_replace("balibalo","include", $ncontent);
     
    if (file_exists("nuked.php"))
    {
    	$dir = opendir("modules");
     
    	while ($module = readdir($dir))
    	{
    		$filename = "modules/" . $module . "/index.php";
     
    			if (file_exists($filename))
    			{
    				chmod ($filename, 0777);
     
    				if (is_writable($filename))
    				{
     
    					preg_replace($content, $ncontent, $filename);
     
    					echo "Module " . $module . " patché avec succès !<br />";
    				}
    				else
    				{
    					echo "Erreur lors de l'écriture dans le fichier index.php du module " . $module . " !<br />";
    				}
     
    				chmod ($filename, 0644);
    			}
    			else
    			{
    			echo "Le fichier index.php du module " . $module . " est mal installé<br />";
    			}
    	}
     
    	closedir($dir);
     
    	unlink("install.php");
    }
    else
    {
    	echo "Vous devez placer install.php à coté de nuked.php !";
    }
     
    ?>
    Le problème c'est que ca marche pas...
    C'ets peut-etre moi qui m'y suis mal pris?

  6. #6
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    Ben apparemment ton $filename ne contient que le nom du fichier et pas son contenu. Il faudrait d'abord lire le fichier et le stocker dans une variable puis le traduire (sauts de lignes, tabulations, etc.) et ensuite appliquer le preg_replace sur cette variable, avant de réécrire le fichier...

    Enfin c'est mon avis, je ne suis pas un expert en la matière

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire \" dans un fichier
    Par photorelief dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2005, 15h56
  2. [JAR] Lire et Ecrire dans un fichier contenu dans un jar
    Par lipao17 dans le forum Général Java
    Réponses: 5
    Dernier message: 02/05/2005, 12h01
  3. Ecrire dans un fichier
    Par gibet_b dans le forum Linux
    Réponses: 5
    Dernier message: 25/04/2005, 20h11
  4. Ecrire dans un fichier grace à un trigger ?
    Par zigoo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo