2012-08-10 1 views
21

Je dois ouvrir un fichier texte et remplacer une chaîne. J'ai besoin ceRemplacer la chaîne dans un fichier texte en utilisant PHP

Old String: <span id="$msgid" style="display: block;"> 
New String: <span id="$msgid" style="display: none;"> 

C'est ce que j'ai jusqu'à présent, mais je ne vois pas de changement dans le fichier texte en plus des espaces blancs supplémentaires.

$msgid = $_GET['msgid']; 

$oldMessage = ""; 
$deletedFormat = ""; 

// Read the entire string 
$str = implode("\n", file('msghistory.txt')); 

$fp = fopen('msghistory.txt', 'w'); 

// Replace something in the file string - this is a VERY simple example 
$str = str_replace("$oldMessage", "$deletedFormat", $str); 

fwrite($fp, $str, strlen($str)); 
fclose($fp); 

Comment puis-je faire?

+0

Assurez-vous que vous avez écrire des autorisations sur le fichier msghistory.txt – Lobo

+0

Est-ce correct? '$ deletedFormat =" "';' –

+0

Vous avez une erreur de syntaxe. '$ deletedFormat =" "';' vous avez un guillemet simple supplémentaire. –

Répondre

59

Est-ce que ce travail:

$msgid = $_GET['msgid']; 

$oldMessage = ""; 

$deletedFormat = ""; 

//read the entire string 
$str=file_get_contents('msghistory.txt'); 

//replace something in the file string - this is a VERY simple example 
$str=str_replace("$oldMessage", "$deletedFormat",$str); 

//write the entire string 
file_put_contents('msghistory.txt', $str); 
+1

Y a-t-il une raison pour écrire "$ oldMessage" au lieu de $ oldMessage? Je ne suis pas sûr si les citations ont un but ici. – user1111929

+0

U R homme impressionnant. – ako

8

Merci à vos commentaires. Je l'ai fait une fonction qui donne un message d'erreur quand il se produit:

/** 
* Replaces a string in a file 
* 
* @param string $FilePath 
* @param string $OldText text to be replaced 
* @param string $NewText new text 
* @return array $Result status (success | error) & message (file exist, file permissions) 
*/ 
function replace_in_file($FilePath, $OldText, $NewText) 
{ 
    $Result = array('status' => 'error', 'message' => ''); 
    if(file_exists($FilePath)===TRUE) 
    { 
     if(is_writeable($FilePath)) 
     { 
      try 
      { 
       $FileContent = file_get_contents($FilePath); 
       $FileContent = str_replace($OldText, $NewText, $FileContent); 
       if(file_put_contents($FilePath, $FileContent) > 0) 
       { 
        $Result["status"] = 'success'; 
       } 
       else 
       { 
        $Result["message"] = 'Error while writing file'; 
       } 
      } 
      catch(Exception $e) 
      { 
       $Result["message"] = 'Error : '.$e; 
      } 
     } 
     else 
     { 
      $Result["message"] = 'File '.$FilePath.' is not writable !'; 
     } 
    } 
    else 
    { 
     $Result["message"] = 'File '.$FilePath.' does not exist !'; 
    } 
    return $Result; 
} 
3

Cela fonctionne comme un charme, rapide et précise:

function replace_string_in_file($filename, $string_to_replace, $replace_with){ 
    $content=file_get_contents($filename); 
    $content_chunks=explode($string_to_replace, $content); 
    $content=implode($replace_with, $content_chunks); 
    file_put_contents($filename, $content); 
} 

Utilisation:

$filename="users/data/letter.txt"; 
$string_to_replace="US$"; 
$replace_with="Yuan"; 
replace_string_in_file($filename, $string_to_replace, $replace_with); 

// ne jamais oublier EXPLODE quand il s'agit de l'analyse des chaînes // c'est un outil puissant et rapide

+0

exploser, les implos sont plus lents qu'un simple str_replace: http://micro-optimization.com/str_replace-vs-implode-explode.html –

Questions connexes