【问题标题】:Joomla Development - Failed to move fileJoomla Development - 无法移动文件
【发布时间】: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

保存失败,出现以下错误:

我知道这很简单,但我已经盯着它看太久了!

谢谢!

【问题讨论】:

  • 您是否拥有在文件夹中写入的所有权限? “它只会破坏表单更新而不是新表单提交”是什么意思?所以第一次有效,当您更新时无效?
  • 我确实拥有该文件夹的权限。我可以提交表格,文件将按预期上传。如果我单击记录进行编辑并尝试更改附件,则会出现问题。

标签: php joomla


【解决方案1】:

好吧,我看不出失败的任何充分理由。

我唯一可以建议您的是 JFile::upload 无法在 /libraries/joomla/filesystem/file.php@449 中进行调试并逐步尝试了解问题所在。

这实际上是JFile::upload的文件和行。
那里可能唯一对您重要的行是第 502 行,即:

if (is_writeable($baseDir) && move_uploaded_file($src, $dest))

特别是尝试查看变量$ret 发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-15
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多