Проблемы с записью в файлы в нужном месте - PullRequest
1 голос
/ 28 октября 2010

Я нахожу строку в файле PHP, используя PHP, и пишу в нее, изменяя переменную в определенной строке.Пожалуйста, смотрите функцию ниже.

Это прекрасно работает, когда я тестирую его самостоятельно.Однако, когда я запускаю его в своем основном скрипте, он не работает должным образом.Я нахожу следующий тип on = "Version_3_18110"; в файле PHP, когда он должен быть $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);
}

Contenets of 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 ]

1 голос
/ 28 октября 2010

Хотя это более экзотический подход, использующий PHPs tokenizer lib, я думаю, что это лучше, чем подверженный ошибкам анализ строки.Попробуйте, если это работает для вас (проверено на 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');

Обработка ошибок оставлена ​​в качестве упражнения для читателя.; -)

0 голосов
/ 28 октября 2010

Вы пробовали изменить:

fwrite($file, '$version = "Version_'.$version.'";'."\r\n");

На

fwrite($file, $version."= \"Version_".$version."\";\r\n");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...