使用 PHP 替换文本文件中的字符串

Posted

技术标签:

【中文标题】使用 PHP 替换文本文件中的字符串【英文标题】:Replace string in text file using PHP 【发布时间】:2012-08-07 17:56:05 【问题描述】:

我需要打开一个文本文件并替换一个字符串。我需要这个

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

我该怎么做?

【问题讨论】:

确保您对 msghistory.txt 文件具有写入权限 是这样吗? $deletedFormat = ""'; 您有语法错误。 $deletedFormat = ""'; 你有一个额外的单引号。 谢谢,我确实有写权限。仍然不是我不知道为什么 html 不写 $msgid 有一个值需要放在样式 id 属性中。我缺少一些小东西... 【参考方案1】:

这行得通吗:

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

【讨论】:

【参考方案2】:

感谢您的 cmets。我制作了一个函数,当它发生时会给出错误消息:

/**
 * 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 // 这是一个强大而快速的工具

【讨论】:

爆炸,内爆比简单的 str_replace 慢:micro-optimization.com/str_replace-vs-implode-explode.html 请问你为什么使用explode,implode?我听从了你的建议,效果很好!我只是想知道,为什么你不只是使用 str_replace() ??? @Pedroski:亲爱的朋友,你好!这只是我的想法。我承认 str_replace() 可能会更快。 谢谢,我问是因为我不太了解这些东西。我所知道的是:它可以工作,而且速度对我来说并不重要!【参考方案4】:
public function fileReplaceContent($path, $oldContent, $newContent)

    $str = file_get_contents($path);
    $str = str_replace($oldContent, $newContent, $str);
    file_put_contents($path, $str);

使用

fileReplaceContent('your file path','string you want to change', 'new string')

【讨论】:

以上是关于使用 PHP 替换文本文件中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

替换文件中的文本

如何使用C替换文本文件中的字符?

PHP 中非常规的 .ZIP 处理和查找/替换

无法匹配和替换文本文件中的 " 和 ' 字符

从 Excel 工作表中查找并替换所有文本文件中的字符串

如何从 git 历史记录中的文件中替换文本?