2010-04-19 3 views
4

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

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

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

+0

Это старый вопрос, и вы должны решить это или нет, но моя проблема была, я забыл установить расширение PHP «GD» на сервере. – Anil

ответ

1

Точное сообщение об ошибке/ошибке вашего сообщения не отображается в исходном коде 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; 
    } 
} 

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

  1. Это один называют и не удается

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

+0

Он забрасывается в catch 'Mage_Adminhtml_Cms_Wysiwyg_ImagesController :: uploadAction()' –

0

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

Если это не помогает here's a module, что позволит загружать изображения без загрузки Flash. Вы, по крайней мере, сможете убедиться, что это не проблема со вспышкой.

0

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

Я пробовал использовать Charles Proxy и «он работает» !! то есть при использовании прокси-сервера теперь работает uploader.swf. Без прокси-сервера это не так.

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

0

проверить свой виртуальный хост включает в себя:

php_admin_value home_dir xxxxxxxxxxxxxx 

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

например: конфигурация ВХост включает HOME_DIR/дом/кто-то

и php.ини загружать записи файлов в/TMP

/tmp не в реж home_dir и построить класс использования функции file_exists() PHP косяк чтения/TMP/

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

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

php_admin_valueupload_tmp_dir/home/someone/tmp

АРАС Не2 перезагружать

привет

5

Если вы проверяете реакцию 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, в данном случае.

Так что теперь проблема why is $_FILES['image']['tmp_name'] empty?

Я проверил '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
  • Изменить браузер, компьютер, ясно локальный кэш и куки и т.д.
  • Проверьте права доступа для/СМИ/папки (пробовал 777 и 755).
  • Читать и реализованы изменения в .htaccess для серверов GoDaddy, как описано в файле .htaccess в корне Magento
  • Disabled вид магазина, покраснел кэш, вход из Magento, удален кеш из/вар/кэш/и затем повторно включен вид магазина, очищается кэш снова
  • Загружено и назвал раннюю версию Prototype.js
  • Загрузил локальную версию JQuery, как я прочитал, что прототип и JQuery может конфликтовать, и это было предложено решение
  • Проверено, что Расширение GD установлено в PHP-сборнике моего сервера.
0
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 "</pre>"; 
      } 
     } 
Смежные вопросы