Ecrir dans un fichier texte sans espace à la fin

Fermé
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 25 juil. 2013 à 01:05
 cacao - 26 juil. 2013 à 01:26
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
A voir également:

5 réponses

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
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
25 juil. 2013 à 10:15
Non, ce ne sont pas les \x00
regxp et trim ?
Je ne l'ai ai jamais utilisé :\
0
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
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
25 juil. 2013 à 23:15
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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