上传Magento包时$ _FILES为空

时间:2014-07-02 16:51:48

标签: php magento package magento-1.9

我正在尝试安装Magento软件包,但我得到了No file was uploaded

它来自此代码,因为$_FILES/downloader/Maged/Controller.php

中的空数组
/**
 * Install uploaded package
 */
public function connectInstallPackageUploadAction()
{
    if (!$_FILES) {
        echo "No file was uploaded";
        return;
    }

    if(empty($_FILES['file'])) {
        echo "No file was uploaded";
        return;
    }

    $info =& $_FILES['file'];

    if(0 !== intval($info['error'])) {
        echo "File upload problem";
        return;
    }

    $target = $this->_mageDir . DS . "var/" . uniqid() . $info['name'];
    $res = move_uploaded_file($info['tmp_name'], $target);
    if(false === $res) {
        echo "Error moving uploaded file";
        return;
    }

    $this->model('connect', true)->installUploadedPackage($target);
    @unlink($target);
}

值得注意的是,产品上传工作正常。

我得到的唯一日志输出是

  

2014-07-03T18:44:15 + 00:00 ERR(3):警告:array_key_exists()期望参数2为数组,在/var/www/vhosts/example.com/httpdocs/app中给出null第166行的/code/core/Mage/Captcha/Model/Observer.php

exception.log为空

8 个答案:

答案 0 :(得分:1)

确保magento安装中的var文件夹完全可写。 777许可。所有文件夹和文件。

答案 1 :(得分:1)

您可以先尝试上传一个小的虚拟文件,以检查错误是否保持不变。

可能会达到文件上传限制。

由于upload_max_filesizepost_max_size太小,因此文件上传通常会失败,如PHP文档的Common Pitfalls部分所述。

答案 2 :(得分:1)

在firefox中使用firebug检查您的表单是否有enctype="multipart/form-data"

答案 3 :(得分:1)

检查用它创建的用户组,

要解释一下,最近我有一些文件保存问题。原来我使用Root用户为服务器创建了文件夹,CPanel用户(运行的是一个php)没有权限写入Root帐户拥有的文件夹,即使设置权限为777。

只是一个想法。

答案 4 :(得分:1)

首先检查您的安装是否配置正确 见@ http://php.net/manual/en/features.file-upload.common-pitfalls.php

此外,如果您使用PUT / xhr上传文件在输入流上

$in = fopen('php://input','r');

请参阅@ http://php.net/manual/en/features.file-upload.put-method.phphttps://stackoverflow.com/a/11771857/2645347

这可以解释空的$ FILES数组,以防万一其他没问题且上传通过xhr / PUT工作。

答案 5 :(得分:1)

$ _ FILES是通过HTTP POST方法上传到当前脚本的关联项目数组。所有上传的文件都存储在$ HTTP_POST_FILES中,包含相同的初始信息,但不是超全局。所以,...确保该方法是POST

请务必检查您的表单是否包含正确的enctype:

<form ... enctype="multipart/form-data"> ... </form>

有时会发生当有人上传多个文件时,$ _FILES返回空。当我选择超过某个大小的文件时,可能会发生这种情况问题可能出在POST_MAX_SIZE配置中。

答案 6 :(得分:1)

开启

app/code/core/mage/captcha/model/observer.php

更改

public function checkUserLoginBackend($observer)
{
$formId = 'backend_login';
        $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
        $loginParams = Mage::app()->getRequest()->getPost('login');
        $login = array_key_exists('username', $loginParams) ? $loginParams['username'] : null;
        if ($captchaModel->isRequired($login)) {
            if (!$captchaModel->isCorrect($this->_getCaptchaString(Mage::app()->getRequest(), $formId))) {
                $captchaModel->logAttempt($login);
                Mage::throwException(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
            }
        }
        $captchaModel->logAttempt($login);
        return $this;
    }

public function checkUserLoginBackend($observer)
{
    $formId = 'backend_login';
    $captchaModel = Mage::helper('captcha')->getCaptcha($formId);

    $login = Mage::app()->getRequest()->getPost('username');
    if ($captchaModel->isRequired($login)) {
        if (!$captchaModel->isCorrect($this->_getCaptchaString(Mage::app()->getRequest(), $formId))) {
            $captchaModel->logAttempt($login);
            Mage::throwException(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
        }


    }
    $captchaModel->logAttempt($login);
    return $this;
}

您的问题是: &#34;如果在RSS feed中登录,则Captcha Observer会抛出错误&#34;问题#208

或者如果您希望只能将变量$ login替换为:

$login = array_key_exists('username', array($loginParams)) ? $loginParams['username'] : null;

答案 7 :(得分:-1)

您可以尝试以下几点。 使用Magento Varien文件上传的类来上传文件。

Magento File Uploader

1)检查表单中的enctype="multipart/form-data"

2)在表单中使用Magento Form Key。

3)使用Varien文件上传器使用以下链接答案上传文件。