Im develloping with symfony1.0,I'm using a file validation(validate/upload.yml) like that :
methods:
post: [logo_file]
get: [logo_file]
names:
logo_file:
required: Yes
required_msg: Please select a file to upload 23008
validators: myFileValidator
file: true
myFileValidator:
class: sfFileValidator
param:
mime_types:
- 'image/jpeg'
- 'image/png'
- 'image/gif'
- 'image/x-png'
- 'image/pjpeg'
mime_types_error: Only PNG, GIF and JPEG images files are allowed 23009
max_size: 512000
max_size_error: Max size is 512Kb 23010
And all is fine until now but I wanna also make a validation for name of image,I hope to sanitze the name from Invalid character before stroring at database?
EDIT
Of course not so now Im using a function before sving in DB :
public static function generateUniqueName($fileName, $fileExtension)
{
// Create a name
$fileUniqueSuffix=PublicIdGeneratorPeer::getPublicIdForTable(self::UNIQUE_FILE_ID);
$finalFileName = $fileName.'-'.$fileUniqueSuffix.$fileExtension;
//here I want to replace or remove invalid character from $filename
return $finalFileName;
}
EDIT-2 :
So now I have a lot of name of image stored in database with invlaid charater,so I hope to create a script or a way to travel all data in feald "image_name" and change all invalid character in DB directly,my first idea it's to use a "task"?!Any idea?
EDIT-3 :
So now I make my batch like that :
<?php
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/..'));
define('SF_APP', 'backend');
define('SF_ENVIRONMENT', 'prod');
define('SF_DEBUG', false);
// symfony directories
require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
sfContext::getInstance();
/********************************** Begin **********************************/
$criteria = new Criteria();
$listCompanyLogo = CompanyLogoPeer::doSelect($criteria);
foreach($listCompanyLogo as $CompanyLogo)
{
if(!is_null($CompanyLogo))
{
$filename= $CompanyLogo->getFileName();
$filepath=$CompanyLogo->getFilePath();
$fileurl=$CompanyLogo->getFileUrl();
$finalFileName=StringTool::stripText($filename);
$finalFilePath=StringTool::cleanUrl($filename,$filepath);
$finalFileUrl=StringTool::cleanUrl($filename,$fileurl);
$CompanyLogo->setFileName($finalFileName);
$CompanyLogo->setFilePath($finalFilePath);
$CompanyLogo->setFileUrl($finalFileUrl);
$CompanyLogo->save();
echo ' the name of logo : '.$filename.' is modified by ==============>'.$finalFileName.'<br>' ;
exit();
}
}
/********************************** End **********************************/
?>
So I can change the invalid character from the name of file in database,my new problem is how to change the name of file in his direcotry,I mean change the name of file of the file itself,I dont know how?
Edit-4
So here it's my final code :
batch/updatelogoName.php
<?php
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/..'));
define('SF_APP', 'backend');
define('SF_ENVIRONMENT', 'prod');
define('SF_DEBUG', false);
// symfony directories
require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
sfContext::getInstance();
/********************************** Begin **********************************/
$criteria = new Criteria();
$listCompanyLogo = CompanyLogoPeer::doSelect($criteria);
foreach($listCompanyLogo as $CompanyLogo)
{
if(!is_null($CompanyLogo))
{
$filename= $CompanyLogo->getFileName();
$filepath=$CompanyLogo->getFilePath();
$fileurl=$CompanyLogo->getFileUrl();
$thumbnailName= $CompanyLogo->getThumbnailName();
$ThumbnailPath= $CompanyLogo->getThumbnailPath();
$ThumbnailUrl= $CompanyLogo->getThumbnailUrl();
$finalFileName=StringTool::cleanName($filename);
$finalFilePath=StringTool::cleanUrl($filename,$filepath);
$finalFileUrl=StringTool::cleanUrl($filename,$fileurl);
$finalThumbnailName=StringTool::cleanName($thumbnailName);
$finalThumbnailPath=StringTool::cleanUrl($filename,$ThumbnailPath);
$finalThumbnailUrl=StringTool::cleanUrl($filename,$ThumbnailUrl);
$CompanyLogo->setFileName($finalFileName);
$CompanyLogo->setFilePath($finalFilePath);
$CompanyLogo->setFileUrl($finalFileUrl);
$CompanyLogo->setThumbnailName($finalThumbnailName);
$CompanyLogo->setThumbnailPath($finalThumbnailPath);
$CompanyLogo->setThumbnailUrl($finalThumbnailUrl);
$CompanyLogo->save();
if(rename('../web/'.$ThumbnailUrl, '../web/'.$finalThumbnailUrl) !== 'false')
{
rename('../web/'.$ThumbnailUrl, '../web/'.$finalThumbnailUrl);
}
echo 'The logo : '.$filename.' is modified by ==============>'.$finalFileName.'<br>' ;
}
}
/********************************** End **********************************/
?>
Class StringTool.php :
public static function stripText($text)
{
$accFrom = array('ë','é','è','ê','Ê','Ë','É','È','à','â','á','ä','ã','å','Â','Å','À','Á','Ã','Ä','ç','Ç','Î','Ï','Ì','Í','ì','í','î','ï','Ó','Ô','Õ','Ö','ò','ó','ô','õ','ö','Ù','Ú','Û','Ü','ù','ú','û','ü');
$accTo = array('e','e','e','e','e','e','e','e','a','a','a','a','a','a','a','a','a','a','a','a','c','c','i','i','i','i','i','i','i','i','o','o','o','o','o','o','o','o','o','u','u','u','u','u','u','u','u');
$text = str_replace($accFrom,$accTo,$text);
$text = strtolower($text);
// strip all non word chars
$text = preg_replace('/\W/', ' ', $text);
// replace all white space sections with a dash
$text = preg_replace('/\ +/', '-', $text);
// trim dashes
$text = preg_replace('/\-$/', '', $text);
$text = preg_replace('/^\-/', '', $text);
return $text;
}
/*
* Remove extnesion File
*
*/
public static function RemoveExtension($fileName)
{
$extension = strrchr($fileName, '.');
if($extension !== false)
{
$fileName = substr($fileName, 0, -strlen($extension));
}
return $fileName;
}
/*
* Remove all non alpha-numeric characters from URLs and Files
*
*/
public static function cleanName ($fileName)
{
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
$extremove = self::RemoveExtension($fileName);
$result = self::stripText($extremove);
$finaleFileName= $result.'.'.$extension;
return $finaleFileName;
}
public static function cleanUrl($fileName,$filePath)
{
$finaleFileName = self::cleanName($fileName);
$finaleFilePath=str_replace($fileName, $finaleFileName, $filePath);
return $finaleFilePath;
}
If you see any error or optimization tell me...
generateUniqueName?