在正确的位置写入文件的问题

时间:2010-10-28 14:11:19

标签: php file

我在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);
*/

2 个答案:

答案 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");