【发布时间】:2015-04-02 00:41:04
【问题描述】:
我正在处理的组件有一个奇怪的问题。该组件有一个包含文件上传的表单。代码检查重复的文件名并在末尾附加一个计数器。除了我尝试修改记录并更改相关文件之外,所有这些都可以完美运行。
我使用组件创建器在该代码处构建框架以进行更新 -
//Replace any special characters in the filename
$filename = explode('.', $file['name']);
$filename[0] = preg_replace("/[^A-Za-z0-9]/i", "-", $filename[0]);
//Add Timestamp MD5 to avoid overwriting
$filename = md5(time()) . '-' . implode('.',$filename);
$uploadPath = '/var/www/plm_anz/' . $filename;
$fileTemp = $file['tmp_name'];
if(!JFile::exists($uploadPath)){
if (!JFile::upload($fileTemp, $uploadPath)){
JError::raiseWarning(500, 'Error moving file');
return false;
}
}
$array['ping_location'] = $filename;
当我更新代码以删除 MD5 总和并附加计数器时,一切都崩溃了..
//Replace any special characters in the filename
$filename = explode('.', $file['name']);
$filename[0] = preg_replace("/[^A-Za-z0-9]/i", "-", $filename[0]);
$originalFile = $finalFile = $file['name'];
$fileCounter = 1;
//Rename duplicate files
$fileprefix = pathinfo($originalFile, PATHINFO_FILENAME);
$extension = pathinfo($originalFile, PATHINFO_EXTENSION);
while (file_exists( '/var/www/plm_anz/'.$finalFile )){
$finalFile = $fileprefix . '_' . $fileCounter++ . '.' . $extension;
}
$uploadPath = '/var/www/plm_anz/' . $finalFile;
$fileTemp = $file['tmp_name'];
if (!JFile::upload($fileTemp, $uploadPath)){
$fileMessage = "Error moving file - temp file:". $fileTemp . " Upload path ". $uploadPath;
JError::raiseWarning(500, $fileMessage);
return false;
}
我已将原因缩小到 while 循环创建的文件名,但无法弄清楚为什么它只会中断表单更新而不是新表单提交。
我在 Joomla (3.4) 中遇到的错误是:
错误
移动文件时出错 - 临时文件:/tmp/phpgwag5r 上传路径 /var/www/plm_anz/com_hotcase_6.zip
保存失败,出现以下错误:
我知道这很简单,但我已经盯着它看太久了!
谢谢!
【问题讨论】:
-
您是否拥有在文件夹中写入的所有权限? “它只会破坏表单更新而不是新表单提交”是什么意思?所以第一次有效,当您更新时无效?
-
我确实拥有该文件夹的权限。我可以提交表格,文件将按预期上传。如果我单击记录进行编辑并尝试更改附件,则会出现问题。