簡體   English   中英

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

[英]Magento file upload with Varien_File_Uploader fails - $_FILES['tmp_name'] file doesn't exist

我已經在我的自定義模塊中為“ customer_save_before”事件添加了觀察者代碼。 當客戶在Magento Front(客戶管理)區域中提交其詳細信息時會觸發。 它執行一個腳本,該腳本應攔截$ _FILES [...]數組,並使用Varien_File_Uploader將其保存在數據庫中。

我在... / template / customer / form / edit.phtml中添加了一個新字段

<input type="file" name="logo" id="logo" title="<?php echo $this->__('Logo') ?>" class="input-file" />

這是我在'customer_save_before'上執行的Observer.php代碼:

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;
          }
        }
 }
}

上傳文件后,啟用測試代碼后,我得到一個包含文件信息以及'tmp_name'路徑和臨時文件不存在的消息的數組:

[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 ['tmp_name']文件不存在。 因此,該文件未保存在服務器上。

當我在后端運行此Observer代碼時,我得到相同的測試代碼消息(文件不存在),但無論如何該文件都會被上傳。

如何修復前端代碼以上傳此文件?

我有一個類似的問題。 您檢查系統日志了嗎?

MAGENTO文件夾/var/log/system.log

對我來說,它說:

警告:file_exists()[function.file-exists]:open_basedir限制有效。 File(/ var / tmp / phpSJjFIv)不在允許的路徑內:(...)/httpdocs/lib/Varien/File/Uploader.php行150

在php.ini或phpinfo()中查找php設置。 搜索“ open_basedir”和“ upload_tmp_dir”。 如果設置了open_basedir限制,並且upload_tmp_dir不在允許的目錄中,則可能會引發此類錯誤。

在我的末端,該問題已歸檔:Mage / Customer / controllers / AccountController.php,代碼為:

 $customerForm->compactData($customerData);

在$ customerData中,當compactData函數調用它刪除文件時,我的文件自定義屬性也正在接收。 並且由於在安裝文件中創建屬性的以下行而將其包括在內:

$used_in_forms[]="customer_account_create";

當我從自定義屬性設置行中刪除上述行時,它解決了該問題。 希望對有類似問題的人有所幫助,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM