私はsymfony1.0で開発しています。そのようなファイル検証(validate/upload.yml)を使用しています:
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
これまでのところすべて問題ありませんが、画像の名前の検証も行いたいのですが、データベースにアクセスする前に、無効な文字から名前をサニタイズしたいと考えていますか?
編集
もちろんそうではありませんが、DB で sving する前に関数を使用しています。
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;
}
編集-2 :
だから今、私は無効な文字でデータベースに保存されている画像の名前をたくさん持っているので、フィールド「image_name」のすべてのデータを移動し、DB のすべての無効な文字を直接変更するスクリプトまたは方法を作成したいと考えています。 「タスク」を使用しますか?!アイデアはありますか?
EDIT-3 :
だから今、私はバッチをそのように作ります:
<?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 **********************************/
?>
だから私はデータベース内のファイルの名前から無効な文字を変更することができます,私の新しい問題は、彼のディレクトリ内のファイルの名前を変更する方法です,私はファイル自体のファイルの名前を変更することを意味します,私は方法がわかりません?
編集-4
だからここに私の最終的なコードです:
バッチ/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 **********************************/
?>
クラス 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;
}
エラーや最適化が表示された場合は教えてください...