代码上的PHP错误它不应该运行

时间:2011-07-17 16:18:38

标签: php classloader

首先让我对我在下面发布的代码量表示抱歉我会尽量保持尽可能短但这是建立在我的MVC(轻量级-mvc)之上

好的所以我的问题是,由于某种原因,php在我当前代码中不应该使用的代码上抛出致命错误,

所以这是如何工作的我有我的MVC女巫使用网址的前两部分知道它的负载,问题是我正在建立一个Moulder CMS到我的MVC所以它的引导捆绑两次,

所以这是我的问题,

http://{domain}/admin/control/addon/uploader/method/uploadCheck/

我正在使用上面的内容现在让我解释一下/ admin / control用于主MVC系统它自动加载Admin控制器然后从控制器激发controlAction方法,与大多数MVC一样,

下一部分是URL参数,它构建一个与GET或POST相同的数组

array('addon'=>'uploader', 'method'=>'uploadCheck')

因此,我的控制操作将自动加载,如下面的代码

public function controlAction(){
global $_URL;
if(cleanData::URL("addon")){
        $addonName = "addon_".cleanData::URL("addon");
        $methodName = (cleanData::URL("method"))? cleanData::URL("method")."Action" : "indexAction";
        echo $methodName;
        $addon = new $addonName();
        $addon->$methodName();
        return;
    }else{      
        $this->loadView("CMS/controll");
    }
}

cleanData::URL是一个抽象方法,只返回通过addSlashes()

提供的密钥的值

因此,从下面的代码中可以看出,它将使用自动加载器加载模块(AKA插件)

这样你就可以在更简单版本的Zend Frame工作自动加载器中跟随自动加载器工作_所以你有类名addon_admin,它位于文件admin.php里面,位于文件夹addon中,所以自动加载器会加载addon / admin.php的

所以如上所述,我的URL和controlAction正在加载addon / uploader.php,因此这就是内容

<?php
class addon_uploader extends Addons{

    public function uploadCheckAction(){
            echo 0;
    }

    public function uploaderAction(){
        if (!empty($_FILES)) {
            $tmpFile = $_FILES['Filedata']["tmp_name"];
            $newLock = "../uploads/".end(explode('/', $tmpFile).$_FILES['Filedata']['name']);
            move_uploaded_file($tmpFileName, $newLock);

            $POSTback = array(
                'name' => $_FILES['Filedata']['name'],
                'type' => $_FILES['Filedata']['type'],
                'tmp_name' => $newLock,
                'error' => $_FILES['Filedata']['error'],
                'size' => $_FILES['Filedata']['size']
            );

            echo json_enocde($POSTback);
        }
    }
}
?>

但是你可以从我的网址看到它使用uploadCheckAction方法进行调试我已经设置了所以它总是说假(AKA 0),

但我似乎得到了这个错误:

Fatal error: Only variables can be passed by reference in C:\xampp\htdocs\FallenFate\addon\uploader.php on line 11

但第11行是$newLock = "../uploads/".end(explode('/', $tmpFile).$_FILES['Filedata']['name']);女巫不应该使用任何人可以提供任何帮助,为什么会发生这种情况以及如何解决它

1 个答案:

答案 0 :(得分:1)

end() PHP Manual需要表达单个变量(更确切地说是数组),但不需要函数返回值或任何其他类型的表达式。

我认为这基本上是导致错误的原因,更具体地说是您的代码:

$newLock = "../uploads/".end(explode('/', $tmpFile).$_FILES['Filedata']['name']);

你甚至超越了PHP可以应对的任何治疗水平:

  1. 将数组与字符串连接(产生字符串)。
  2. 你在那个字符串上运行end() - 而不是变量,甚至不是数组。
  3. 我不知道你尝试用代码做什么,但我可以尝试:

    $filename = $_FILES['Filedata']['name'];
    $parts = explode('/', $tmpFile);
    $last = end($parts);
    $newLock = "../uploads/". $last . $filename;
    

    或者甚至可能只有这个:

    $filename = $_FILES['Filedata']['name'];
    $newLock = "../uploads/". $filename;