我正在处理的部件有个奇怪的问题。该组件具有包含文件上载的表单。代码检查重复的文件名,并在末尾追加一个计数器。除了我尝试修改记录和更改相关文件之外,所有这些都很好地工作。
我用组件创建者来构建代码的骨架来进行更新-
//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 保存失败,但有以下错误:
我知道这很简单,但我一直盯着它看太久了,看不见它!
谢谢!
发布于 2015-04-07 01:37:10
好吧,既然是这样,我看不出有什么好的理由失败了。
我唯一能告诉您的是,JFile::upload未能在/libraries/joomla/filesystem/file.php@449中进行调试,并一步一步地尝试理解出了什么问题。
这实际上是JFile::upload的文件和行。
在那里,对你来说可能唯一重要的一行是第502行,即:
if (is_writeable($baseDir) && move_uploaded_file($src, $dest))特别是看看变量$ret上发生了什么。
https://stackoverflow.com/questions/29403243
复制相似问题