Ecrir dans un fichier texte sans espace à la fin
Sinistrus
Messages postés
1010
Date d'inscription
Statut
Membre
Dernière intervention
-
cacao -
cacao -
Bonsoir à tous !
J'utilise ce code pour récupérer la version de mon appli et l'inscrire dans un fichier texte.
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
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
-
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 ... -
Non, ce ne sont pas les \x00
regxp et trim ?
Je ne l'ai ai jamais utilisé :\ -
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 -
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); ?> -
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 !