Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
encore un petite contribution.
Cette classe permet de retourner un nom de fichier inexistant, si besoin incrémenté !
pratique pour enregistrer les nom de fichier avec leur nom réel sans se overwrite !
Si vous modifiez ou apportez des fonctionnalités, merci de les partagées ici !
Si vous l'utiliser un petit merci fait toujours plaisir !!!
Des remarques sont bienvenue
utilisation :
dirname dans le constructeur :
$fileFilter = new Nk_Filter_FileName('test/');
$fileName = $fileFilter->filter("test-2011.txt");
ou avec des setters
$fileFilter = new Nk_Filter_FileName();
$fileFilter->setDir('test/');
// a true, incrémente la fin numérique du fichier si elle existe, ici on aura test-2012.txt
// a false, on aura test-2011-1.txt
$fileFilter->useNumericEnd((bool));
$fileName = $fileFilter->filter("test-2011.txt");
ou avec un tableau d'options ou Zend_config dans le constructeur :
$fileFilter = new Nk_Filter_FileName(array('dirname' => 'test/', 'numericend' => true);
$fileName = $fileFilter->filter("test-2011.txt");
Enjoys
<?php /** * Incremente une chaine pour un fichier * par exemple si le fichier image.jpg existe le nom devient image-1.jpg .... * * @Author Jean luc BARAT (contact sur z-f.fr : http://www.z-f.fr/forum/misc.php?email=90080) * @Date 14/09/2011 * @Lisense GNU * @package Nk * @subpackage filter * */ class Nk_Filter_FileName implements Zend_Filter_Interface { /* * string nom du fichier */ private $_fileName; /* * string extention du fichier */ private $_extName; /* * string chemin du dossier */ private $_dirName; /* * bool passé a true, on tente de récupérer * et d'incrémenter la fin numérique du fichier * Attention si une date représente la fin du fichier est sera incrémentée */ private $_useNumericEnd = false; /** * Défini les options * * @param arrray $options */ public function __construct($options = array()) { if ($options instanceof Zend_Config) { $options = $options->toArray(); } elseif (is_string($options)) { $options = array('dirname' => $options); } if (array_key_exists('dirname', $options)) { $this->setDir($options['dirname']); } if (array_key_exists('numericend', $options)) { $this->useNumericEnd($options['numericend']); } } /** * Autorise l'utilisation de la fin numérique du fichier * pour l'incrémentation * * @param bool|int(0|1) $value * @return object Nk_Filter_FileName pour fluent interface */ public function useNumericEnd($value) { $this->_useNumericEnd = (bool) $value; return $this; } /** * Retourne le nom de dossier * * @param string $fileName nom de fichier (avec son extention) * @return object Nk_Filter_FileName pour fluent interface */ public function setDir($dirName) { if(!is_dir($dirName)) throw new Zend_Filter_Exception("Dir '$dirName' is not a directory"); if(strrpos($dirName, '/') + 1 != strlen($dirName)) $dirName .= '/'; $this->_dirName = $dirName; return $this; } /** * Retourne le nom de dossier * * @throws Exception * @return string */ private function _getDir() { $dirName = $this->_dirName; if(!$dirName) throw new Zend_Filter_Exception("Undefined directory, use setDir() method"); return $dirName; } /** * Assigne le nom du fichier * * @param string $fileName nom de fichier (avec son extention) * @return object Nk_Filter_FileName pour fluent interface */ private function _setFile($fileName) { $this->_fileName = $fileName; return $this; } /** * Récupere le nom en minuscule d'un fichier sans extension * @var $file string : le fichier (avec son extension) */ private function _getFileName() { $fileName = $this->_fileName; return strtolower(substr($fileName, 0, strrpos($fileName, '.'))); } /** * Récupere l'extention en minuscule d'un fichier (avec le point) * * @var bool|int(0|1) $dot extention avec (true|1) ou sans (false|0) point * @return string : l'extention en minuscule avec le point */ private function _getExt($dot = true) { $fileName = $this->_fileName; return strtolower(substr($fileName, (strrpos($fileName, '.') + (int) !$dot))); } /** * Défini dans Zend_Filter_Interface * * Returns $value nom de fichier disponible * et au besoin incrémenté * * @param string $value * @return string */ public function filter($value) { $dirName = $this->_getDir(); $file = $this->_setFile($value); $tempFileName = $fileName = $this->_getFileName(); $ext = $this->_getExt(); $numericEnd = 0; if($this->_useNumericEnd) { // on tente de récuperer la fin numerique du filename // le problème avec ce script tient du fait que si le fichier se termine par // par exemple une année, cette année est incrémentée $numericEnd = substr($fileName, strrpos($fileName, '-') +1); if(is_numeric($numericEnd)) { // si la fin est numérique on redéfini le nom du fichier sans sa fin numérique $fileName = substr($fileName, 0, strrpos($fileName, '-')); } } echo $dirName . $tempFileName . $ext; // Tant que le fichier existe while(file_exists($dirName . $tempFileName . $ext) == true) { $tempFileName = $fileName . '-' . ++$numericEnd; } return $tempFileName . $ext; } }
Dernière modification par nk34 (15-09-2011 11:11:49)
Hors ligne
Pages: 1