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