我对我正在处理的组件有一个奇怪的问题。该组件具有包含文件上载的表单。代码检查重复的文件名,并在末尾附加一个计数器。除了我尝试修改记录并更改相关文件外,所有这一切都完美无缺。
我使用组件创建器来构建骨架,该代码适用于更新 -
//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
保存失败,出现以下错误:
我知道这很简单,但我一直盯着它看太久了!
谢谢!
答案 0 :(得分:0)
好的,因为我看不出有什么理由失败的原因。
我唯一可以建议你的是JFile::upload
无法在/libraries/joomla/filesystem/file.php@449
中调试并逐步尝试了解错误。
这实际上是JFile::upload
的文件和行
在那里,对你来说唯一重要的一行是第502行:
if (is_writeable($baseDir) && move_uploaded_file($src, $dest))
特别是尝试查看变量$ret
上的内容。