Magento "Файл не был загружен" - PullRequest
4 голосов
/ 20 апреля 2010

В настоящее время я использую интерфейс администратора magento, пытаюсь загрузить изображение в «управление продуктами», и я получаю сообщение об ошибке «файл не был загружен» после того, как я просматриваю файл и нажимаю «загрузить файл». Я смотрел на других форумах, и основное решение, которое я увидел, было убедиться, что php.ini имеет следующие строки ...

magic_quotes_gpc = off
short_open_tag = on
extension=pdo.so
extension=pdo_mysql.so

У меня Windows / IIS с ISAPI_Rewrite. Есть ли максимальный размер загружаемого файла, который я могу где-то изменить. Я загружаю фотографии с моего локального рабочего стола размером ~ 100 КБ. помощь!

Ответы [ 8 ]

7 голосов
/ 02 июля 2013

Если вы проверите ответ XHR в отладчике, вы увидите это {"error":"File was not uploaded.","errorcode":666}

Эта ошибка происходит от Varien_File_Uploader::__construct() в lib/Varien/File/Uploader.php

Вот важные части

<?php

class Varien_File_Uploader
{
    /**
     * Uploaded file handle (copy of $_FILES[] element)
     *
     * @var array
     * @access protected
     */
    protected $_file;

    const TMP_NAME_EMPTY = 666;

    function __construct($fileId)
    {
        $this->_setUploadFileId($fileId);
        if(!file_exists($this->_file['tmp_name'])) {
            $code = empty($this->_file['tmp_name']) ? self::TMP_NAME_EMPTY : 0;
            throw new Exception('File was not uploaded.', $code);
        } else {
            $this->_fileExists = true;
        }
    }
}

Оглядываясь назад, вы видите, что это называется

$uploader = new Mage_Core_Model_File_Uploader('image');

Это расширение из класса Varien, поэтому Varien_File_Uploader::_setUploadFileId($fileId) создаст массив $this->_file на основе ключа image, в данном случае.

Итак, теперь проблема в почему $_FILES['image']['tmp_name'] пусто?

Я проверил поле 'error', временно изменив исключение на

throw new Exception('File was not uploaded. ' . $this->_file['error'], $code);

Я получил 7, то есть Failed to write file to disk., что означает, что проблема связана с разрешениями. Сделайте phpinfo(), чтобы проверить, где установлен ваш upload_tmp_dir, и убедитесь, что он доступен для записи.

В моем случае мне не хватило места в каталоге /tmp.

1 голос
/ 20 апреля 2010

Точное исключение / сообщение об ошибке, о котором ваши отчеты не отображаются в исходном коде Magento в виде строки, поэтому я не уверен на 100%, что указываю вам в правильном направлении.

Тем не менее большинство загрузок в magento обрабатываются методом save для экземпляра объекта класса Varien_File_Uploader.

File: lib/Varien/File/Uploader.php
public function save($destinationFolder, $newFileName=null)
{
    $this->_validateFile();

    if( $this->_allowCreateFolders ) {
        $this->_createDestinationFolder($destinationFolder);
    }

    if( !is_writable($destinationFolder) ) {
        throw new Exception('Destination folder is not writable or does not exists.');
    }

    $result = false;

    $destFile = $destinationFolder;
    $fileName = ( isset($newFileName) ) ? $newFileName : self::getCorrectFileName($this->_file['name']);
    if( $this->_enableFilesDispersion ) {
        $fileName = $this->correctFileNameCase($fileName);
        $this->setAllowCreateFolders(true);
        $this->_dispretionPath = self::getDispretionPath($fileName);
        $destFile.= $this->_dispretionPath;
        $this->_createDestinationFolder($destFile);
    }

    if( $this->_allowRenameFiles ) {
        $fileName = self::getNewFileName(self::_addDirSeparator($destFile).$fileName);
    }

    $destFile = self::_addDirSeparator($destFile) . $fileName;

    $result = move_uploaded_file($this->_file['tmp_name'], $destFile);

    if( $result ) {
        chmod($destFile, 0777);
        if ( $this->_enableFilesDispersion ) {
            $fileName = str_replace(DIRECTORY_SEPARATOR, '/', self::_addDirSeparator($this->_dispretionPath)) . $fileName;
        }
        $this->_uploadedFileName = $fileName;
        $this->_uploadedFileDir = $destinationFolder;
        $result = $this->_file;
        $result['path'] = $destinationFolder;
        $result['file'] = $fileName;
        return $result;
    } else {
        return $result;
    }
}

Добавьте несколько отладочных операторов в эту функцию, чтобы увидеть, если

  1. Это тот, кто вызывается и терпит неудачу

  2. Чтобы выяснить, почему он может возвращать false (т.е. не загружать файл)

0 голосов
/ 24 сентября 2018

Я бы также проверил upload_max_filesize с phpinfo(). Для меня это было установлено на 2M, и мой файл имел 3M, и, изменив это, исправил мою проблему с ошибкой File was not uploaded

0 голосов
/ 09 ноября 2015
<code> if (isset($_FILES['cv']['name']) && $_FILES['cv']['name'] != '') {
            try {

                $uploader = new Varien_File_Uploader('cv');
                $uploader->setAllowedExtensions(array('doc', 'docx','pdf'));
                $uploader->setAllowRenameFiles(true);
                $uploader->setFilesDispersion(false);
                $path = Mage::getBaseDir('media') . DS . 'jobs' . DS ;
                if(!is_dir($path)){
                    mkdir($path, 0777, true);
                }
                $uploader->save($path, $_FILES['cv']['name'] );
                $newFilename = $uploader->getUploadedFileName();
                echo "<br />new file name is = ".$newFilename;

            } catch (Exception $e) {
                $error = true;
                echo "<pre>";
                print_r($e);
                echo "
"; } }
0 голосов
/ 02 октября 2015
  • Смена браузера, компьютера, очистка локального кэша, файлов cookie и т. Д.
  • Проверьте разрешения для / media / folder (пробовал 777 и 755).
  • Прочитать и внедрить изменения в .htaccess для серверов GoDaddy, как описано в файле .htaccess в корне Magento
  • Отключено представление магазина, очищенный кеш, выход из Magento, удаление кеша из / var / cache / и затем повторное включение просмотра магазина, очистка кеша снова
  • Загрузил и вызвал более раннюю версию Prototype.js
  • Загрузил локальную версию jQuery, когда я прочитал, что Prototype и jQuery могут конфликтовать, и это было предлагаемое решение
  • Проверено, что расширение GD установлено в сборке PHP моего сервера.
0 голосов
/ 28 марта 2011

подтвердите, что ваш vhost включает:

php_admin_value home_dir xxxxxxxxxxxxxx

Таким образом, upload_tmp_dir должен быть включен в этот корневой каталог, иначе magento функции не могут перехватить tmp_file

Например: ваш vhost включает в себя home_dir / home / somebody

и php.ini запись загружаемых файлов в / tmp

/tmp не находится в директории home_dir и создайте функцию класса use file_exists() php cant read / tmp /

вы должны создать / дома / кого-то / tmp

и включите в vhost конфигурацию

php_admin_value upload_tmp_dir /home/someone/tmp

перезагрузка apache2

привет

0 голосов
/ 22 июня 2010

В моем случае uploader.swf даже не связывается с сервером и возвращает либо «Ошибка ввода-вывода», либо «Ошибка SSL».

Я пытался использовать Charles Proxy, и "это работает" !! т.е. при использовании прокси, теперь работает uploader.swf. Без прокси это не так.

Мне кажется, что проблема полностью в загрузчике SWF, а не на сервере вообще.

0 голосов
/ 24 апреля 2010

Некоторое время назад у меня были некоторые проблемы с добавлением изображений, оказалось, что виновник был загрузчик флэш-изображений. Я отследил, какой это был SWF-файл, и заменил его новой загруженной версией Magento.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...