Squeak.ru - шаблоны программирования

Ошибка загрузки файла Magento с помощью Varien_File_Uploader — файл $_FILES['tmp_name'] не существует

Я включил код наблюдателя в свой пользовательский модуль для события «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, который выполняется на «customer_save_before»:

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'] не существует. В результате файл не сохраняется на сервере.

Когда я запускаю этот код наблюдателя в серверной части, я получаю те же сообщения для моего тестового кода (файл не существует), но файл все равно загружается.

Как исправить мой интерфейсный код для загрузки этого файла?

04.09.2014

  • Вы добавили объявление enctype в форму? (enctype=multipart/form-data) 04.09.2014
  • @sulman да, я уже добавил это. 04.09.2014
  • Алан, как ты решил эту проблему в наблюдателе? 04.03.2016

Ответы:


1

У меня была аналогичная проблема. Вы проверяли системный журнал?

ПАПКА MAGENTO/var/log/system.log

Для меня это говорит:

Предупреждение: file_exists() [function.file-exists]: действует ограничение open_basedir. Файл (/var/tmp/phpSJjFIv) находится за пределами разрешенного пути (путей): (...) /httpdocs/lib/Varien/File/Uploader.php в строке 150

Найдите настройки php в php.ini или phpinfo(). Найдите «open_basedir» и «upload_tmp_dir». Если установлено ограничение open_basedir, а upload_tmp_dir не находится в разрешенных каталогах, может возникнуть такая ошибка.

15.11.2014

2

В конце концов проблема была в файле: Mage/Customer/controllers/AccountController.php в коде:

 $customerForm->compactData($customerData);

в $customerData мой пользовательский атрибут файла также получает, когда функция compactData вызвала удаление файла. и он включен из-за следующей строки в создании атрибута в установочном файле:

$used_in_forms[]="customer_account_create";

когда я удалил указанную выше строку из строки настройки настраиваемого атрибута, это решило проблему. надеюсь, будет полезно кому-то, у кого есть похожая проблема,

04.03.2016
Новые материалы

День 76/100 Книга
День 76/100 Книга Обучение — это непрерывный процесс с ресурсами, широко используемыми людьми, которые признают сложный путь достижения успешной цели. Хотя поначалу это может показаться..

Gmail Smart Compose: умный способ написать электронное письмо
Gmail означает почту Google, это бесплатная служба электронной почты, предоставляемая Google по всему миру. Google официально запустил Gmail в 2004 году, и в настоящее время этой услугой..

API следующего поколения: gRPC n Javascript
gRPC - быстро развивающаяся технология, которая потенциально может заменить протокол HTTP. Это быстрее, чем традиционные HTTP-вызовы, потому что он отправляет данные в двоичном формате, а не в..

Ускоренный курс по жадным алгоритмам
Дай мне, дай мне, дай мне Аудитория Эта статья предназначена для инженеров, достаточно хорошо разбирающихся в программировании, структурах данных и алгоритмах. Он в основном основан на..

Изучайте Java (Урок 2: Комментарии)
Как и зачем использовать комментарии в java с примерами Введение: Комментарии — это строки текста в программе Java, которые игнорируются компилятором и используются для добавления..

Async Await в Swift: легкое управление параллелизмом
Введение в запуск асинхронного кода Асинхронный код выполняет несколько операций одновременно. Параллелизм необходим при выполнении тяжелых вычислений или сетевых запросов. Однако это может..

Очистить файлы Program .cache в Ubuntu 20.10
Очистите кеш за несколько простых шагов! GNU / Linux реализовал эффективное управление хранилищем для своих пользователей. Но заметили ли вы, что в вашей системе Linux заканчивается место,..