2012-08-10 27 views
21

Necesito abrir un archivo de texto y reemplazar una cadena. Necesito esteReemplazar cadena en archivo de texto usando PHP

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

Esto es lo que tengo hasta ahora, pero aún no hay cambios en el archivo de texto, además de espacios en blanco adicionales.

$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); 

¿Cómo puedo hacerlo?

+0

Asegúrate de tener escriba permisos en el archivo msghistory.txt – Lobo

+0

¿Es esto correcto? '$ deletedFormat =" "';' –

+0

Tiene un error de sintaxis. '$ deletedFormat =" "';' tiene una comilla simple extra. –

Respuesta

59

hace este trabajo:

$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

¿Hay alguna razón por la que escriba "$ oldMessage" en lugar de $ oldMessage? No estoy seguro si las citas tienen algún propósito aquí. – user1111929

+0

U R hombre impresionante. – ako

8

Gracias a sus comentarios. He hecho una función que da un mensaje de error cuando sucede:

/** 
* 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

Esto funciona como un encanto, rápido y preciso:

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); 
} 

Uso:

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

// nunca te olvides de EXPLODE cuando se trata de análisis de cadenas // es una herramienta poderosa y rápida

+0

explotar, las implosiones son más lentas que un simple str_replace: http://micro-optimization.com/str_replace-vs-implode-explode.html –

Cuestiones relacionadas