How to change specific contents in the script of a // PHP file

0

I would like to know if someone has or gets me some script to change content of a PHP file in specific lines without changing the others, it can be fopen , fwrite strong> fclose .

I actually want, along with data captured in form , to change some define .

The input[name='url_site'] would change the line define('WFOX_SITE_URL', 'http://127.0.0.1/wfox');

The input[name='theme_site'] would change the line define('WFOX_SITE_THEME', WFOX_SITE_DIR . '/v1');

The input[name='name_site'] would change the line define('WFOX_SITE_NAME', 'Meu Projeto');

Full script [define_log.php] :

error_reporting(0);
session_start();
$user_id = $_SESSION['user_id'];
date_default_timezone_set('America/Fortaleza');

ini_set('default_charset', 'utf-8');

define('WFOX_BASE_DIR', __DIR__);
define('WFOX_SITE_DIR', WFOX_BASE_DIR . '/wfox-content');
define('WFOX_ADMIN_DIR', WFOX_BASE_DIR . '/wfox-admin');

define('WFOX_SITE_URL', 'http://127.0.0.1/wfox');
define('WFOX_SITE_ADM', WFOX_SITE_URL . '/wfox-admin');
define('WFOX_SITE_THEME', WFOX_SITE_DIR . '/v1');
define('WFOX_SITE_NAME', 'Meu Projeto');

include( WFOX_ADMIN_DIR . '/database/conn.php');
include( WFOX_ADMIN_DIR . '/api/wfox_bd_api.php');
include( WFOX_ADMIN_DIR . '/api/wfox_bd_post.php');
include( WFOX_ADMIN_DIR . '/api/wfox_bd_user.php');
include( WFOX_ADMIN_DIR . '/api/wfox_bd_upload.php');
include( WFOX_ADMIN_DIR . '/api/wfox_stats_chart.php');
    
asked by anonymous 30.01.2017 / 18:51

1 answer

1

Note that there are several ways to solve.

In the example below, I opted for something that was not invasive, modifying the current structure or business model.

I just suggest modifying the default form parameter names.

It's easier to define names that are identical to constants.

Otherwise, you will have to create an array that relates such data, which makes the script just a little larger and redundant.

<?php

/*
Dummy data.
Seria os dados do $_POST.
*/
$post['WFOX_ADMIN_DIR'] = '/outro-admin'; // simulação
$post['WFOX_SITE_URL'] = 'http://localhost'; // simulação
$post['WFOX_SITE_THEME'] = '/v2'; // simulação

/*
O path do arquivo. Recomendado usar paths absolutos.
*/
$file = __DIR__.'/a.php';

/*
Lê os resultdos, armazenando-os num array.
*/
$data = file($file);

/*
Contador da linha atual do arquivo aberto.
É usado para otimizar a leitura, evitando fazer loops inteiros para cada parâmetro.
*/
$line = 0;

/*
Quantidade de linhas do arquivo aberto
*/
$size = count($data);

/*
Itera os dados requisitados via $_POST
*/
foreach ($post as $k => $v) {
    /*
    Itera as linhas do arquivo aberto.
    É importante que a ordem dos parâmetros no post tenham a mesma ordem das linhas do arquivo.
    Caso contrário, essa rotina torna-se ineficiente.
    A vantagem aqui é otimizar, evitando fazer leitura completa do array em todas as iterações.
    Aqui, a linha continua a partir de onde parou o anterior encontrado.
    */
    while ($line < $size) {
        /*
        Procura a ocorrência da string na linha corrente
        */
        if (strstr($data[$line], '\''.$k.'\'') !== false) {
            /*
            Encontrou o padrão.
            Aplica um explode() para obter o terceiro índice que é onde encontra-se o valor que deseja alterar.
            */
            $arr = explode('\'', $data[$line]);
            $arr[3] = $v;

            /*
            Remonta a linha já com o novo valor.
            */
            $data[$line] = implode('\'', $arr);

            /*
            Interrompe o fluxo desse laço de repetição (while) e vai para o próximo do (foreach)
            */
            break;
        }
        $line++;
    }
}

/*
Salva uma cópia do conteúdo corrente.
Recomendado sempre salvar uma cópia para evitar transtornos.
Não é obrigatório. Crie a sua própria política de trabalho sobre o gerenciamento de versões.
*/
copy($file, $file.'-'.date('YmdHis'));

/*
Salva os dados modificados.
*/
file_put_contents($file, implode('', $data));

Read the comments to understand each stretch of the flow.

    
31.01.2017 / 19:46