使用Varien_File_Uploader上传Magento文件失败 - $ _FILES [' tmp_name']文件不存在

时间:2014-09-04 09:42:55

标签: php magento file-upload

我在自定义模块中添加了观察者代码,用于' customer_save_before'事件。当客户在Magento前台,账户管理区域提交详细信息时,它会触发。它执行一个应拦截$ _FILES [...]数组的脚本,并使用Varien_File_Uploader将其保存在数据库中。

我在... / template / customer / form / edit.phtml

中添加了一个新字段
<input type="file" name="logo" id="logo" title="<?php echo $this->__('Logo') ?>" class="input-file" />

这是我的Observer.php代码,可以在&#39; customer_save_before&#39;:

上执行
class Walder_Logoupload_Model_Observer extends Mage_Core_Model_Abstract {

 public function customer_save_before($observer) {

    // Test code START

        echo "<pre>"; print_r($_FILES);

        $tempexists = file_exists($_FILES['logo']['tmp_name'])?'exists':'doesnt exist';
        echo "logo.tmp_name file: ".$tempexists;
        exit;

    // Test code END

        if(isset($_FILES['logo']['name'])) {
          try {
            $uploader = new Varien_File_Uploader('logo');
            $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
            $uploader->setAllowRenameFiles(false);
            $uploader->setFilesDispersion(false);

            $path       = Mage::getBaseDir('media') . DS .'catalog'.DS.'customer'.DS.'logo';
            $newName    = time() . $_FILES['logo']['name'];
            $uploader->save($path, $newName);
            $customer->setLogo($newName);
          }catch(Exception $e) {
                echo "Exception: ".$e; exit;
          }
        }
 }
}

文件上传后,启用测试代码后,我会得到一个包含文件信息的数组以及&#39; tmp_name&#39;路径和临时文件不存在的消息:

[logo] => Array
    (
        [name] => sample-logo.png
        [type] => image/png
        [tmp_name] => /home/www/mag59212/tmp/phpbCoax5
        [error] => 0
        [size] => 107564
    )

logo.tmp_name file: doesnt exist

在测试代码注释掉后,我收到此异常错误消息:

exception 'Exception' with message 'File was not uploaded.' 
in /home/www/mag59212/html/magento-de/lib/Varien/File/Uploader.php:153

这意味着相同的$ _FILES [&#39; tmp_name&#39;]文件不存在。因此,文件不会保存在服务器上。

当我在后端运行此Observer代码时,我的测试代码(文件不存在)会收到相同的消息,但无论如何都会上传文件。

如何修复我的前端代码以上传此文件?

2 个答案:

答案 0 :(得分:0)

我有类似的问题。你检查了系统日志吗?

  

MAGENTO FOLDER / var / log / system.log

对我而言,它说:

  

警告:file_exists()[function.file-exists]:open_basedir限制生效。文件(/ var / tmp / phpSJjFIv)不在允许的路径中:(...)/httpdocs/lib/Varien/File/Uploader.php第150行

在php.ini或phpinfo()中查找php设置。搜索&#34; open_basedir&#34;和&#34; upload_tmp_dir&#34;。如果设置了open_basedir限制,并且upload_tmp_dir不在允许的目录中,则可能会触发此类错误。

答案 1 :(得分:0)

在我的结尾,问题存档了: Mage / Customer / controllers / AccountController.php代码:

 $customerForm->compactData($customerData);

在$ customerData中我的文件自定义属性也在compactData函数调用时删除了文件。 它包括在设置文件中的属性创建中的以下行:

$used_in_forms[]="customer_account_create";

当我从自定义属性设置行中删除上述行时,它解决了该问题。 希望对有类似问题的人有所帮助,