使用 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 替换文本文件中的字符串的主要内容,如果未能解决你的问题,请参考以下文章