2010-10-28 3 views
1

Je trouve une ligne dans un fichier PHP en utilisant PHP et en lui écrivant en changeant une variable sur une ligne particulière. S'il vous plaît voir la fonction ci-dessous.Problèmes d'écriture dans les fichiers au bon endroit

Cela fonctionne très bien lorsque je le teste seul. Cependant, lorsque je l'exécute dans mon script principal, cela ne fonctionne pas correctement. Je trouve le genre de chose suivant on = "Version_3_18110"; dans le fichier PHP quand il devrait être $version = "Version_3_18110";

Cette fonction peut-elle être affectée par des échos plus loin dans le script principal? La chaîne passée en tant que $version est toujours ce dont j'ai besoin, elle n'est pas écrite correctement.

Que se passe-t-il?

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 de 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

Intéressant ce que vous essayez de faire ici. Pourriez-vous fournir le contenu (exemple) de db-connect.php? Il serait plus facile d'essayer votre script. – Max

+0

Je suggère d'utiliser un script sed d'une ligne pour cela, puisque vous faites juste une recherche et remplacez un motif particulier (http://www.grymoire.com/Unix/Sed.html). –

+0

Je suis sur une machine Windows et cette application web sera distribuée sur des machines basées sur Windows. Des commandes équivalentes? – Abs

Répondre

1

Bien que ce soit une approche plus exotique faisant usage de PPA tokenizer lib, je pense que c'est mieux que l'analyse des chaînes sujettes aux erreurs. Essayez ceci si cela fonctionne pour vous (testé PHP unter 5.3, mais devrait fonctionner sur toutes les versions de PHP moderne):

<?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'); 

La gestion des erreurs est laissé comme un exercice pour le lecteur. ;-)

+0

Parfait, ça a marché, même dans le scénario principal sur lequel le mien a échoué. Je n'ai aucune idée pourquoi et je n'ai pas le temps d'enquêter comme j'ai déjà perdu plusieurs heures! Merci pour votre aide Max et je serai sûr d'erreur gérer correctement. ;) – Abs

0

Avez-vous essayé de changer:

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

Pour

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

Cela aussi ne fonctionne pas. Il ajoute un '2 =" Version_3_18112 ";' à cette ligne. Aucune idée d'où ces choses viennent. Btw, je n'ai pas à effacer une ligne avant que je l'écris, n'est-ce pas? – Abs

+0

Excuses, essayez fwrite ($ file, "\ $ version = \" Version _ ". $ Version." \ "; \ R \ n"); – SW4

Questions connexes