Ecrir dans un fichier texte sans espace à la fin

Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
 cacao -
Bonsoir à tous !

J'utilise ce code pour récupérer la version de mon appli et l'inscrire dans un fichier texte.
<?php

define("TITRE_APPLICA",	"Application - v.");

function get_product_version($file_name)
{
   $key = "P\x00r\x00o\x00d\x00u\x00c\x00t\x00V\x00e\x00r\x00s\x00i\x00o\x00n\x00\x00\x00";
   $fptr = fopen($file_name, "rb");
   $data = "";
   while (!feof($fptr))
   {
      $data .= fread($fptr, 65536);
      if (strpos($data, $key)!==FALSE)
         break;
      $data = substr($data, strlen($data)-strlen($key));
   }
   fclose($fptr);
   if (strpos($data, $key)===FALSE)
      return "";
   $pos = strpos($data, $key)+strlen($key);
   $version = "";
   for ($i=$pos; $data[$i]!="\x00"; $i+=2)
      $version .= $data[$i];
   return $version;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?
$fichier = "version.txt";
$fp = fopen($fichier ,"w");
$data=get_product_version("application.exe");
fseek($fp, 0);
fputs($fp, $data);
fclose($fp);

echo TITRE_APPLICA; echo get_product_version("application.exe");

$fichier = "application.exe";
function taille($fichier){
global $size_unit;
$taille = filesize($fichier);
if ($taille >= 1073741824)
{ $taille = round($taille / 1073741824 * 100) / 100 . " Go"; }
elseif ($taille >= 1048576)
{ $taille = round($taille / 1048576 * 100) / 100 . " Mo"; }
elseif ($taille >= 1024)
{ $taille = round($taille / 1024 * 100) / 100 . " Ko"; }
else
{ $taille = $taille . " o"; }
if($taille==0) {$taille="-";}
return $taille;}
echo taille($fichier); 

echo get_product_version("application.exe"); 

$mois_fr = Array("", "de janvier", "de février", "de mars", "d'avril", "de mai", "de juin", "de juillet", "d'août", "de septembre", "d'octobre", "de novembre", "de décembre");
list($mois) = explode('/', date("n")); echo $mois_fr[$mois]; ?>
</body>
</html>


Cependant, il ajoute dans le fichier texte un long espace (sans les "") :
"1.0.82 "

Pouvez-vous m'aider à corriger ce problème svp ?

Salutations

5 réponses

  1. cacao
     
    c'est pas les \x00\x00\x00 dans $key qui les ajoutes ?

    cela dit, tu peux passer $data par un regexp qui vire les espaces ou aussi un trim ...
    0
  2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Non, ce ne sont pas les \x00
    regxp et trim ?
    Je ne l'ai ai jamais utilisé :\
    0
  3. cacao
     
    j'ai testé ton code je n'ai pas eu d'espace à la fin...

    version.txt
    3, 4, 0, 1

    et le résultat dans la page:
    Application - v.3, 4, 0, 1-

    j'imagine que la version de application.exe contient des espaces à la fin ...

    Comme je l'ai dit, tu peux aussi traiter les espaces avant de l'écrire dans le fichier,
    tu peux utiliser trim par exemple:
    fputs( $fp, trim($data) );

    http://php.net/manual/fr/function.trim.php

    ou
    $data = preg_replace('/\s{2}/',$data);
    fputs($fp, $data);
    
    

    http://fr2.php.net/manual/fr/function.preg-replace.php
    0
  4. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Merci cacao ^^
    Bizarre que VB6 envois des espace à la fin de la série...

    Voilà le résultat, peux tu le tester pour moi toi aussi et le valider stp ? :
    <?php
    #################################################################
    ## RECUPERATION DE LA VERSION DE L'EXECUTABLE ###################
    function get_product_version($file_name){
    $key = "P\x00r\x00o\x00d\x00u\x00c\x00t\x00V\x00e\x00r\x00s\x00i\x00o\x00n\x00\x00\x00";
    $fptr = fopen($file_name, "rb");
    $data = "";
    while (!feof($fptr)){$data .= fread($fptr, 65536);
    if (strpos($data, $key)!==FALSE)
    break;
    $data = substr($data, strlen($data)-strlen($key));}
    fclose($fptr);
    if (strpos($data, $key)===FALSE)
    return "";
    $pos = strpos($data, $key)+strlen($key);
    $version = "";
    for ($i=$pos; $data[$i]!="\x00"; $i+=2)
    $version .= $data[$i];
    return $version;}
    #################################################################
    ## FORMATAGE DES ESPACES EN TROP ################################
    function trimUltime($chaine) {
    $chaine = trim($chaine);
    $chaine = str_replace("t", " ", $chaine);
    $chaine = str_replace("r", " ", $chaine);
    $chaine = str_replace("n", " ", $chaine);
    $chaine = preg_replace("( +)", " ", $chaine);
    return $chaine;}
    #################################################################
    ## CREATION ET ECRITURE DU FICHIER TEXTE ########################
    $string = chr(0);
    $fichier = "version.txt";
    $file = fopen($fichier ,"w");
    $data=get_product_version("mon_application.exe");
    fseek($file, 0);
    fwrite($file, trimUltime($data));
    fclose($file);
    #################################################################
    ## TAILLE DE L'EXECUTABLE #######################################
    $fichier = "mon_application.exe";
    function taille($fichier){
    global $size_unit;
    $taille = filesize($fichier);
    if 		($taille >= 1073741824)	{$taille = round($taille / 1073741824 * 100) / 100 . " Go"; }
    elseif 	($taille >= 1048576)	{$taille = round($taille / 1048576 * 100) / 100 . " Mo"; }
    elseif 	($taille >= 1024)		{$taille = round($taille / 1024 * 100) / 100 . " Ko"; }
    else	{$taille = $taille . " o";}
    if($taille==0) {$taille="-";}
    return $taille;}
    #################################################################
    ## ET VOILA LE RESULTAT #########################################
    echo "Mon Application - v.<br />";
    echo $data."<br />";
    echo taille($fichier);
    ?>
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cacao
     
    version.txt
    5.0.5

    affichage
    TEST sur VNC for Windows (5.0.5) / 32/64-bit (exe) / 6.9 MB

    Mon Application - v.
    5.0.5
    6.86 Mo

    c'est ok, plus qu'à optimiser le code !
    0