Magento "Dosya yüklenemedi"

5 Cevap php

Şu anda "yönetmek ürünlerde" bir görüntü yüklemek için çalışırken, magento yönetici arabirimini kullanarak yaşıyorum ve ben dosya taramak ve "yükleme dosyasını" tıkladıktan sonra hata "dosya karşıya değil" olsun. Ben diğer forumlarda baktım ve gördüm temel çözüm php.ini aşağıdaki satırları olduğundan emin olmak vardı ...

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

Ben ISAPI_Rewrite Windows / IIS var. Ben bir yerde değiştirebileceğiniz bir maksimum dosya yükleme boyutu var. Ben boyutu benim yerel masaüstünde ~ 100kb resim yolluyorum. yardım!

5 Cevap

Tam durum / hata mesajı Your'e raporlama bir dize olarak Magento'nın kaynak kodunda görünmüyor, bu yüzden ben burada doğru yönde işaret ediyorum% 100 emin değilim.

O dedi, magento en çok yüklenenler Varien_File_Uploader sınıfının bir örneği nesne üzerinde save yöntemi ile işlenir.

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

Görmek için bu işlevin içine bazı hata ayıklama ifadeleri atarsam

  1. Bu çağrıldığını biri ve başarısız oluyor

  2. (Yani, dosya yükleyerek değil) yanlış dönen olabilir neden anlamaya

Ben bir süre geri görüntüler ekleyerek ile bazı sorunlar vardı, o flaş görüntü aktarıcı suçlu olduğu ortaya çıktı. Ben ne olduğunu swf dosya aşağı izlenen ve indirilen Magento yeni bir sürümü ile değiştirilir.

Bu işe yaramazsa here's a module Eğer flaş aktarıcı olmadan görüntüleri upload sağlayacaktır. En azından bir flash sorun değil sağlamak mümkün olabilir.

Benim durumumda, uploader.swf hatta sunucu ve döner Yükle I / O hatası veya SSL Hatası da temas etmez.

Charles Proxy kullanarak denedim ve "çalışıyor"! bir proxy kullanırken, yani uploader.swf şimdi çalışıyor. Bir vekil olmadan öyle değil.

Sorun tüm sunucu üzerinde, SWF Uploader'inde tamamen değil gibi geliyor bana.

Lütfen vhost şunlardır doğrulayın:

php_admin_value home_dir xxxxxxxxxxxxxx

Yani upload_tmp_dir bu kök dizinde aksi magento fonksiyonlar yapamam catch tmp_file damerhabal edilmelidir

örneğin: Yapılandırma vhost evdizini / home / birisi bulunur

ve php.ini / tmp yükleme dosyaları yazmak

/tmp dir değil home_dir ve sınıf işlevi kullanımını file_exists() php yapamam okuma / tmp / inşa

oluşturmanız gerekir / home / birisi / tmp

ve vhost konfigürasyonunda bulunur

php_admin_value upload_tmp_dir /home/someone/tmp

apache2 yeniden

merhaba

Eğer bir hata ayıklayıcı XHR yanıtı kontrol ederseniz, göreceksiniz bu {"error":"File was not uploaded.","errorcode":666}

Bu hata Varien_File_Uploader::__construct() lib/Varien/File/Uploader.php in geliyor

Burada önemli parçalarıdır

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

Bu denir görmek ağacın geri Looking

$uploader = new Mage_Core_Model_File_Uploader('image');

Varien sınıftan uzatılır, bu nedenle Varien_File_Uploader::_setUploadFileId($fileId), bu durumda anahtarın image göre $this->_file dizi oluşturmak hangi.

Şimdi sorunu why is $_FILES['image']['tmp_name'] boş?

Ben geçici olarak throw new Exception('File was not uploaded. ' . $this->_file['error'], $code); ile değiştirerek 'error' alanını kontrol

I Failed to write file to disk. Introduced in PHP 5.1.0. which means it's a permissions issue. Do a phpinfo() sizin upload_tmp_dir olarak ayarlandığı kontrol ve yazılabilir olduğundan emin olmak için, hangi 7 var.

Benim durumumda, ben /tmp Dir dosya alanı dışında oldu.