Fix: File functions works with filename with special chars

This commit is contained in:
Laurent Destailleur 2009-12-15 11:30:49 +00:00
parent 9c5f2c803d
commit 3f97012399
3 changed files with 51 additions and 46 deletions

View File

@ -2576,21 +2576,20 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit, $
/** /**
\brief Fonction qui renvoie si tva doit etre tva percue recuperable * \brief Fonction qui renvoie si tva doit etre tva percue recuperable
\remarks Si vendeur non assujeti a TVA, TVA par defaut=0. Fin de regle. * \remarks Si vendeur non assujeti a TVA, TVA par defaut=0. Fin de regle.
Si le (pays vendeur = pays acheteur) alors TVA par defaut=TVA du produit vendu. Fin de regle. * Si le (pays vendeur = pays acheteur) alors TVA par defaut=TVA du produit vendu. Fin de regle.
Si (vendeur et acheteur dans Communaute europeenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par defaut=0 (La TVA doit etre paye par acheteur au centre d'impots de son pays et non au vendeur). Fin de regle. * Si (vendeur et acheteur dans Communaute europeenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par defaut=0 (La TVA doit etre paye par acheteur au centre d'impots de son pays et non au vendeur). Fin de regle.
Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par defaut=TVA du produit vendu. Fin de regle * Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par defaut=TVA du produit vendu. Fin de regle
Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = entreprise avec num TVA) intra alors TVA par defaut=0. Fin de regle * Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = entreprise avec num TVA) intra alors TVA par defaut=0. Fin de regle
Sinon TVA proposee par defaut=0. Fin de regle. * Sinon TVA proposee par defaut=0. Fin de regle.
\param societe_vendeuse Objet societe vendeuse * \param societe_vendeuse Objet societe vendeuse
\param societe_acheteuse Objet societe acheteuse * \param societe_acheteuse Objet societe acheteuse
\param taux_produit Taux par defaut du produit vendu * \param taux_produit Taux par defaut du produit vendu
\return float 0 or 1 * \return float 0 or 1
*/ */
function get_default_npr($societe_vendeuse, $societe_acheteuse, $taux_produit) function get_default_npr($societe_vendeuse, $societe_acheteuse, $taux_produit)
{ {
return 0; return 0;
} }
@ -2644,7 +2643,7 @@ function get_exdir($num,$level=3,$alpha=0)
/** /**
* \brief Creation of a directory (recursive) * \brief Creation of a directory (recursive)
* \param $dir Directory to create * \param $dir Directory to create
* \return int < 0 if KO, >= 0 if OK * \return int < 0 if KO, 0 = already exists, > 0 if OK
*/ */
function create_exdir($dir) function create_exdir($dir)
{ {
@ -2652,7 +2651,8 @@ function create_exdir($dir)
dol_syslog("functions.lib::create_exdir: dir=".$dir,LOG_INFO); dol_syslog("functions.lib::create_exdir: dir=".$dir,LOG_INFO);
if (@is_dir($dir)) return 0; $dir_osencoded=dol_osencode($dir);
if (@is_dir($dir_osencoded)) return 0;
$nberr=0; $nberr=0;
$nbcreated=0; $nbcreated=0;
@ -2669,7 +2669,8 @@ function create_exdir($dir)
// (ex selon config de open_basedir) // (ex selon config de open_basedir)
if ($ccdir) if ($ccdir)
{ {
if (! @is_dir($ccdir)) $ccdir_osencoded=dol_osencode($ccdir);
if (! @is_dir($ccdir_osencoded))
{ {
dol_syslog("functions.lib::create_exdir: Directory '".$ccdir."' does not exists or is outside open_basedir PHP setting.",LOG_DEBUG); dol_syslog("functions.lib::create_exdir: Directory '".$ccdir."' does not exists or is outside open_basedir PHP setting.",LOG_DEBUG);
@ -2677,7 +2678,7 @@ function create_exdir($dir)
$dirmaskdec=octdec('0755'); $dirmaskdec=octdec('0755');
if (! empty($conf->global->MAIN_UMASK)) $dirmaskdec=octdec($conf->global->MAIN_UMASK); if (! empty($conf->global->MAIN_UMASK)) $dirmaskdec=octdec($conf->global->MAIN_UMASK);
$dirmaskdec |= octdec('0110'); $dirmaskdec |= octdec('0110');
if (! @mkdir($ccdir, $dirmaskdec)) if (! @mkdir($ccdir_osencoded, $dirmaskdec))
{ {
// Si le is_dir a renvoye une fausse info, alors on passe ici. // Si le is_dir a renvoye une fausse info, alors on passe ici.
dol_syslog("functions.lib::create_exdir: Fails to create directory '".$ccdir."' or directory already exists.",LOG_WARNING); dol_syslog("functions.lib::create_exdir: Fails to create directory '".$ccdir."' or directory already exists.",LOG_WARNING);

View File

@ -2311,19 +2311,17 @@ class Product extends CommonObject
$dir = $sdir .'/'. get_exdir($this->id,2) . $this->id ."/"; $dir = $sdir .'/'. get_exdir($this->id,2) . $this->id ."/";
$dir .= "photos/"; $dir .= "photos/";
if (! file_exists($dir)) create_exdir($dir);
{
create_exdir($dir);
}
if (file_exists($dir)) $dir_osencoded=$dir;
if (file_exists($dir_osencoded))
{ {
$originImage = $dir . $file['name']; $originImage = $dir . $file['name'];
// Cree fichier en taille origine // Cree fichier en taille origine
$result=dol_move_uploaded_file($file['tmp_name'], $originImage, 1); $result=dol_move_uploaded_file($file['tmp_name'], $originImage, 1);
if (file_exists($originImage)) if (file_exists(dol_osencode($originImage)))
{ {
// Cree fichier en taille vignette // Cree fichier en taille vignette
$this->add_thumb($originImage,$maxWidth,$maxHeight); $this->add_thumb($originImage,$maxWidth,$maxHeight);
@ -2342,7 +2340,8 @@ class Product extends CommonObject
{ {
require_once(DOL_DOCUMENT_ROOT ."/lib/images.lib.php"); require_once(DOL_DOCUMENT_ROOT ."/lib/images.lib.php");
if (file_exists($file)) $file_osencoded=dol_osencode($file);
if (file_exists($file_osencoded))
{ {
vignette($file,$maxWidth,$maxHeight); vignette($file,$maxWidth,$maxHeight);
} }
@ -2354,27 +2353,28 @@ class Product extends CommonObject
* \param $files url de l'image * \param $files url de l'image
* \author Jean Heimburger juin 2007 * \author Jean Heimburger juin 2007
*/ */
function add_photo_web($sdir, $files) function add_photo_web($sdir, $file)
{ {
$dir = $sdir .'/'. get_exdir($this->id,2) . $this->id ."/"; $dir = $sdir .'/'. get_exdir($this->id,2) . $this->id ."/";
$dir .= "photos/"; $dir .= "photos/";
if (! file_exists($dir)) $dir_osencoded=dol_osencode($dir);
if (! file_exists($dir_osencoded))
{ {
dol_syslog("Product Create $dir"); dol_syslog("Product Create ".$dir);
create_exdir($dir); create_exdir($dir);
} }
if (file_exists($dir)) if (file_exists($dir_osencoded))
{ {
// Cree fichier en taille vignette // Cree fichier en taille vignette
// \todo A faire // \todo A faire
// Cree fichier en taille origine // Cree fichier en taille origine
$content = file_get_contents($files); $content = file_get_contents($file);
$nom = basename($files); $nom = basename($file);
$im = fopen($dir.$nom,'wb'); $im = fopen(dol_osencode($dir.$nom),'wb');
fwrite($im, $content); fwrite($im, $content);
fclose($im); fclose($im);
// } // }
@ -2394,12 +2394,14 @@ class Product extends CommonObject
$dir = $sdir . '/'. $pdir; $dir = $sdir . '/'. $pdir;
$nbphoto=0; $nbphoto=0;
if (file_exists($dir))
$dir_osencoded=dol_osencode($dir);
if (file_exists($dir_osencoded))
{ {
$handle=opendir($dir); $handle=opendir($dir_osencoded);
while (($file = readdir($handle)) != false) while (($file = readdir($handle)) != false)
{ {
if (! utf8_check($file)) $file=utf8_encode($file); // readdir returns ISO if (! utf8_check($file)) $file=utf8_encode($file); // To be sure data is stored in UTF8 in memory
if (dol_is_file($dir.$file)) return true; if (dol_is_file($dir.$file)) return true;
} }
} }
@ -2425,14 +2427,17 @@ class Product extends CommonObject
$pdirthumb = $pdir.'thumbs/'; $pdirthumb = $pdir.'thumbs/';
$nbphoto=0; $nbphoto=0;
if (file_exists($dir))
$dir_osencoded=dol_osencode($dir);
if (file_exists($dir_osencoded))
{ {
$handle=opendir($dir); $handle=opendir($dir_osencoded);
while (($file = readdir($handle)) != false) while (($file = readdir($handle)) != false)
{ {
$photo=''; $photo='';
if (! utf8_check($file)) $file=utf8_encode($file); // readdir returns ISO if (! utf8_check($file)) $file=utf8_encode($file); // To be sure date is stored in UTF8 in memory
if (dol_is_file($dir.$file)) if (dol_is_file($dir.$file))
{ {
$nbphoto++; $nbphoto++;
@ -2454,7 +2459,7 @@ class Product extends CommonObject
print '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdir.$photo).'" alt="Taille origine" target="_blank">'; print '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdir.$photo).'" alt="Taille origine" target="_blank">';
// Si fichier vignette disponible, on l'utilise, sinon on utilise photo origine // Si fichier vignette disponible, on l'utilise, sinon on utilise photo origine
if ($photo_vignette && is_file($dirthumb.$photo_vignette)) { if ($photo_vignette && dol_is_file($dirthumb.$photo_vignette)) {
print '<img border="0" height="120" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdirthumb.$photo_vignette).'">'; print '<img border="0" height="120" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdirthumb.$photo_vignette).'">';
} }
else { else {
@ -2506,9 +2511,8 @@ class Product extends CommonObject
$nbphoto=0; $nbphoto=0;
$tabobj=array(); $tabobj=array();
$newdir=utf8_check($dir)?utf8_decode($dir):$dir; $dir_osencoded=dol_osencode($dir);
$handle=@opendir($dir_osencoded);
$handle=@opendir($newdir);
if ($handle) if ($handle)
{ {
while (($file = readdir($handle)) != false) while (($file = readdir($handle)) != false)
@ -2564,7 +2568,7 @@ class Product extends CommonObject
if (preg_match('/(\.jpg|\.bmp|\.gif|\.png|\.tiff)$/i',$filename,$regs)) if (preg_match('/(\.jpg|\.bmp|\.gif|\.png|\.tiff)$/i',$filename,$regs))
{ {
$photo_vignette=preg_replace('/'.$regs[0].'/i','',$filename).'_small'.$regs[0]; $photo_vignette=preg_replace('/'.$regs[0].'/i','',$filename).'_small'.$regs[0];
if (file_exists($dirthumb.$photo_vignette)) if (file_exists(dol_osencode($dirthumb.$photo_vignette)))
{ {
dol_delete_file($dirthumb.$photo_vignette); dol_delete_file($dirthumb.$photo_vignette);
} }
@ -2577,8 +2581,8 @@ class Product extends CommonObject
*/ */
function get_image_size($file) function get_image_size($file)
{ {
$newfile=utf8_check($file)?utf8_decode($file):$file; $file_osencoded=dol_osencode($file);
$infoImg = getimagesize($newfile); // Get information on image $infoImg = getimagesize($file_osencoded); // Get information on image
$this->imgWidth = $infoImg[0]; // Largeur de l'image $this->imgWidth = $infoImg[0]; // Largeur de l'image
$this->imgHeight = $infoImg[1]; // Hauteur de l'image $this->imgHeight = $infoImg[1]; // Hauteur de l'image
} }

View File

@ -382,10 +382,10 @@ else // Open and return file
// Output files on browser // Output files on browser
dol_syslog("viewimage.php return file $original_file content-type=$type"); dol_syslog("viewimage.php return file $original_file content-type=$type");
$neworiginal_file=utf8_check($original_file)?utf8_decode($original_file):$original_file; $original_file_osencoded=dol_osencode($original_file);
// This test if file exists should be useless. We keep it to find bug more easily // This test if file exists should be useless. We keep it to find bug more easily
if (! file_exists($neworiginal_file)) if (! file_exists($original_file_osencoded))
{ {
$langs->load("main"); $langs->load("main");
dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$_GET["file"])); dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$_GET["file"]));
@ -402,7 +402,7 @@ else // Open and return file
header('Content-type: image/png'); header('Content-type: image/png');
} }
readfile($neworiginal_file); // Need a path in ISO readfile($original_file_osencoded);
} }
?> ?>