Symfony1 在symfony 1中上载文件验证
我正在使用symfony1.0进行开发,我正在使用一个文件验证(validate/upload.yml),如下所示:Symfony1 在symfony 1中上载文件验证,symfony1,upload,Symfony1,Upload,我正在使用symfony1.0进行开发,我正在使用一个文件验证(validate/upload.yml),如下所示: methods: post: [logo_file] get: [logo_file] names: logo_file: required: Yes
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
<?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 **********************************/
?>
到目前为止一切都很好,但我还想对图像的名称进行验证,我希望在数据库中进行笔划之前清除无效字符中的名称
编辑
当然不是这样,现在我正在使用函数,然后在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:
所以现在我有很多图像的名称存储在数据库中,带有invlaid字符,所以我希望创建一个脚本或一种方法,以feald“image_name”的形式传输所有数据,并直接更改数据库中的所有无效字符,我的第一个想法是使用“task”?!有什么想法吗
编辑-3:
因此,现在我将我的批次如下所示:
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
<?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 **********************************/
?>
如果您看到任何错误或优化,请告诉我…您可以使用striptext方法在
generateUniqueName
函数中清理文件名。例如,在以下情况中使用的:
编辑:
对于第二个请求,您应该创建一个任务。事实上,这是一项任务,但在sf1.0中称为批处理。看见基本上:
- 你把你所有的图像都拿出来
- 你清理所有的名字
- 您可以使用新名称重命名磁盘上的所有映像
urlize
然后使用:
$finalFileName = Doctrine_Inflector::urlize($fileName).'-'.$fileUniqueSuffix.$fileExtension;
你确定你的yml缩进了吗?@j0k我编辑了我的第一条消息,你看到了我的答案……那么你为什么不在
generateUniqueName
中进行清理呢?1.0版现在已经很旧了——我建议你升级到1.3版,而且更改非常小(除了表单更改,这是巨大的,但直到1.4版才是强制性的).我知道halfer,这只是一个简单的更正,我们将用symfony 2.1重新构建它。@jOk我做了一个新的编辑,请你可以看到我的第一条消息好的,我在数据库和目录中有一个文件名,名为“Aranès.jpg”,但当我从数据库中获取名称并将其重命名后,我有了“Aranès.jpg”├那么重命名retrun flaseI我认为你应该重命名文件名而不是整个路径。是的,我知道我对整个路径这么做,为了解释我给你的只是文件名,它的编码UTF8有问题,因为当我删除“è”时,它很好没有问题,你只需要包含这个孤独的类。它不使用任何来自条令的东西,除了名称(顺便说一句,您可以重命名名称)
public static function generateUniqueName($fileName, $fileExtension)
{
// Create a name
$fileUniqueSuffix = PublicIdGeneratorPeer::getPublicIdForTable(self::UNIQUE_FILE_ID);
$finalFileName = myTools::stripText($fileName).'-'.$fileUniqueSuffix.$fileExtension;
return $finalFileName;
}
$finalFileName = Doctrine_Inflector::urlize($fileName).'-'.$fileUniqueSuffix.$fileExtension;