Php 在正确的位置写入文件时出现问题
我使用PHP在PHP文件中找到一行,并通过在特定行中更改变量来写入它。请参阅下面的函数 当我自己测试它时,它工作得很好。但是,当我在主脚本中运行它时,它不能正常工作。我在=“Version\u 3\u 18110”上发现了以下内容时,它应该是Php 在正确的位置写入文件时出现问题,php,file,Php,File,我使用PHP在PHP文件中找到一行,并通过在特定行中更改变量来写入它。请参阅下面的函数 当我自己测试它时,它工作得很好。但是,当我在主脚本中运行它时,它不能正常工作。我在=“Version\u 3\u 18110”上发现了以下内容时,它应该是$version=“version\u 3\u 18110” 此功能是否会受到主脚本上方回声的影响??作为$version传入的字符串始终是我所需要的,只是没有正确写入 发生了什么事 function edit_config_version($version
$version=“version\u 3\u 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);
*/
您是否尝试过改变:
fwrite($file, '$version = "Version_'.$version.'";'."\r\n");
到
您是否尝试过改变:
fwrite($file, '$version = "Version_'.$version.'";'."\r\n");
到
尽管这是一种使用PHPs lib的更奇特的方法,但我认为这比容易出错的字符串解析更好。如果它适合您,请尝试此方法(在PHP 5.3中测试过,但应适用于任何现代PHP版本):
虽然这是一种利用PHPs lib的更奇特的方法,但我认为这比容易出错的字符串解析更好。如果它适合您,请尝试此方法(在PHP 5.3中测试过,但应适用于任何现代PHP版本):
你想在这里做什么很有趣。能否提供db-connect.php的(示例)内容?这样可以更容易地尝试您的脚本。我建议为此使用一行sed脚本,因为您只是在搜索和替换特定的模式()。我在windows计算机上,此web应用程序将在基于windows的计算机上分发。有没有等效的命令?@Max-我已经更新了我的问题。我所要做的只是在另一个脚本中替换一个变量。有趣的是,你在这里要做的事情。能否提供db-connect.php的(示例)内容?这样可以更容易地尝试您的脚本。我建议为此使用一行sed脚本,因为您只是在搜索和替换特定的模式()。我在windows计算机上,此web应用程序将在基于windows的计算机上分发。有没有等效的命令?@Max-我已经更新了我的问题。我所要做的只是在另一个脚本中替换一个变量。这也不起作用。它添加了一个2=“Version\u 3\u 18112”代码>到那一行。不知道这些东西是从哪里来的。顺便说一句,在我写之前我不需要清除一行,是吗?抱歉,请尝试写($file,\$version=\$version)\$version.\“;\r\n”);那也不行。它添加了一个2=“Version\u 3\u 18112”代码>到那一行。不知道这些东西是从哪里来的。顺便说一句,在我写之前我不需要清除一行,是吗?抱歉,请尝试写($file,\$version=\$version)\$version.\“;\r\n”);很好,即使在我失败的主要剧本中,它也起了作用。我不知道为什么,我没有时间调查,因为我已经浪费了几个小时!谢谢你的帮助,麦克斯,我一定会妥善处理错误的很好,即使在我失败的主要剧本中,它也起了作用。我不知道为什么,我没有时间调查,因为我已经浪费了几个小时!谢谢你的帮助,麦克斯,我一定会妥善处理错误的
<?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');