使用 Zend_File_Transfer_Adapter_Http 重命名要上传的一系列文件时遇到问题。在代码中的某个时刻,我遇到了一种奇怪的语法。假设您对我尝试上传的多个文件进行了一系列验证。在调用类方法后,我正在使用 foreach 循环遍历文件getFileInfo()
。所以基本上我会检查每个文件是否没有通过验证,然后,如果它们通过验证,我正在尝试运行以下代码:
else {
$reconocido=TRUE;
$sin_espacios=str_replace(' ','_', $nombre_file, $renombrado);
$reconocido=FALSE;
$uploader->addValidator('Extension', FALSE, 'gif, jpg, png, pdf');
if($uploader->isValid($archivo)) {
$reconocido=TRUE;
} else {
$mime = $uploader->getMimeType($archivo);
$aceptados = array('jpg'=>'image/jpeg', 'png'=>'image/png', 'gif'=>'image/gif', 'pdf'=>'application/pdf');
$clave = array_search($mime, $aceptados);
if(!$clave) {
$messages[]="Tipo de archivo no reconocido.";
} else {
$sin_espacios = "$sin_espacios.$clave";
$reconocido=TRUE;
$renombrado=TRUE;
}
}
if($reconocido) {
$existe = scandir($destino);
if(in_array($sin_espacios, $existe)) {
$punto = strrpos($sin_espacios, '.');
$base = substr($sin_espacios, 0, $punto);
$extension = substr($sin_espacios, $punto);
$i = 1;
do {
$sin_espacios=$base.'_'.$i++.$extension;
} while (in_array($sin_espacios, $existe));
$renombrado=TRUE;
}
$uploader->clearValidators();
$uploader->addFilter('Rename', array('target'=>$sin_espacios, $info['tmp_name']));
$exito=$uploader->receive($archivo);
我似乎遇到的问题是最后一行之前的行,即$uploader->addFilter('Rename', array('target'=>$sin_espacios, $info['tmp_name']));
因为它似乎是一种奇怪的语法(为什么要在数组的键值中包含逗号?碰巧,运行代码确实会上传文件,并将它们重命名,但我一直收到以下警告:
Warning: Illegal string offset 'source' in C:\Zend_FW\ZendFramework-1.11.12-minimal\library\Zend\Filter\File\Rename.php on line 145
Warning: Illegal string offset 'target' in C:\Zend_FW\ZendFramework-1.11.12-minimal\library\Zend\Filter\File\Rename.php on line 145
还有:
File 'C:\Windows\Temp\php97CA.tmp' could not be renamed. It already exists.
如果我问的问题应该很明显,请原谅我。事实是我的文档指出我正在谈论的语法是正确的,但是在 ZendFramework 站点中我没有找到类似的东西。那么这样做的正确语法是什么?我也意识到使用 ZendFramework 可能非常复杂,就我目前的水平而言,但它一直对我有用,直到我尝试进行多次上传。我在这里阅读了有关使用 Zend 上传文件的非常详尽的说明:
PHP:如何重命名使用 Zend_Form_Element_File 上传的文件?
但我不太担心文件被覆盖,因为这是网页的管理部分。如有任何想法,我将不胜感激。
为了更准确,我怀疑问题是过滤器无法识别我尝试应用的新名称。我之前使用过重命名过滤器的“目标”选项没有问题,根据手册,它是:目标:新目录或文件的文件名。我想我做得对。虽然我想知道我是否应该在这里使用文件的完整路径,但我仍然不明白为什么应该使用我之前提到的语法,但是什么是正确的语法,嗯?