2012-08-10 78 views
21

我需要打開一個文本文件並替換一個字符串。我需要這個用PHP替換文本文件中的字符串

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

這是我到目前爲止,但我沒有看到除了多餘的空格在文本文件中的任何改變。

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

我該怎麼辦?

+0

確保你有在msghistory.txt文件上寫入權限 – Lobo 2012-08-10 12:19:51

+0

這是正確的嗎? '$ deletedFormat =「」';' – 2012-08-10 12:20:49

+0

你有一個語法錯誤。 '$ deletedFormat =「」';'你有額外的單引號。 – 2012-08-10 12:21:03

回答

59

這是否工作:

$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

是否有你寫「$ oldMessage」而不是$ oldMessage的原因?我不確定引號是否有用。 – user1111929 2017-07-30 14:21:56

+0

U R真棒的人。 – ako 2017-09-05 05:52:11

8

感謝您的意見。我所做的,當它發生,給錯誤消息的功能:

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

這個工程就像一個魅力,快速,準確的:

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

用法:

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

//永遠不會忘記EXPLODE當談到字符串解析 //它是一個功能強大且快速的工具

+0

爆炸,內爆比簡單的str_replace慢:http://micro-optimization.com/str_replace-vs-implode-explode.html – 2017-01-11 12:47:41