我在PHP文件中找到一行使用PHP并通过更改特定行的变量来写入它。请参阅下面的功能。
当我自己测试时,这很好用。但是,当我在我的主脚本中运行它时,它无法正常工作。我在PHP文件中找到以下类型的事物on = "Version_3_18110";
,它应该是$version = "Version_3_18110";
这个函数能否受到主脚本进一步影响的回声?传递给$version
的字符串总是我需要它,它只是没有正确写入。
发生了什么事?
function edit_config_version($version){
$version = trim($version);
$file = fopen("../includes/db-connect.php", "r") or exit("Unable to open file!");
$count = 0;
while(!feof($file)){
$line = fgets($file);
if(substr($line, 0, 10)=='$version ='){
$line_number = $count;
}
$count++;
}
fclose($file);
$count = 0;
$file = fopen("../includes/db-connect.php", "r+") or exit("Unable to open file!");
while(!feof($file)){
if($line_number==$count){
fwrite($file, '$version = "Version_'.$version.'";'."\r\n");
}
$line = fgets($file);
$count++;
}
fclose($file);
}
db_connect.php的观点:
/*
* Date: 06/10/09
* Last Updated: 06/04/2010
*/
$serverName = 'ABS-PC';
$monitor_name = "BTSH_Mon_3_18111";
$version = "Version_3_18112";
$full_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$full_url = explode('view-report.php', $full_url);
$sitePath = $full_url[0];
$full_url = dirname('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']).'/';
$sitePathFolder = $full_url;
/*
* Make sure to close the connection in the scripts
* sqlsrv_close( $conn);
*/
答案 0 :(得分:1)
虽然这是一种使用PHP tokenizer lib的更奇特的方法,但我认为这比容易出错的字符串解析更好。试试这个,如果它适合你(测试unter PHP 5.3,但应该适用于任何现代PHP版本):
<?php
function edit_config_version($version){
$version = trim($version);
$source = file_get_contents('config.php');
$tokens = token_get_all($source);
$fh = fopen('config.php', 'w');
foreach ($tokens as $token) {
if(is_string($token)) {
fwrite($fh, $token);
continue;
}
list($id, $text) = $token;
if($id == T_CONSTANT_ENCAPSED_STRING && strpos($text, 'Version_') === 1) fprintf($fh, '"Version_%s"', $version);
else fwrite($fh, $text);
}
fclose($fh);
}
edit_config_version('2345_545454');
错误处理留给读者练习。 ; - )
答案 1 :(得分:0)
您是否尝试过更改:
fwrite($file, '$version = "Version_'.$version.'";'."\r\n");
要
fwrite($file, $version."= \"Version_".$version."\";\r\n");