PHP错误,代码不应运行

PHP错误,代码不应运行,php,classloader,Php,Classloader,首先让我为我在下面发布的大量代码表示歉意,我会尽量让它尽可能短,但这是建立在我的MVC(轻量级MVC)之上的 好吧,我的问题是,出于某种原因,php在我当前代码中不应该使用的代码上抛出了一个致命错误 这是如何工作的我让我的MVC witch使用url的前两个部分来了解它的加载情况,问题是我在我的MVC中构建了一个模制CMS,所以它启动了两次 这就是我的问题 http://{domain}/admin/control/addon/uploader/method/uploadCheck/ 我现在使用

首先让我为我在下面发布的大量代码表示歉意,我会尽量让它尽可能短,但这是建立在我的MVC(轻量级MVC)之上的

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

这是如何工作的我让我的MVC witch使用url的前两个部分来了解它的加载情况,问题是我在我的MVC中构建了一个模制CMS,所以它启动了两次

这就是我的问题

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()提供的键的值。

因此,正如您从下面的代码中看到的,它将使用自动加载程序加载模块(又名插件)

您可以在Zend Frame work autoloader的更简单版本中使用auto loader,这样您就可以在文件夹addon中的admin.php文件中使用类名addon_admin,这样autoloader就可以加载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);
        }
    }
}
?>
但是第11行是
$newLock=“../uploads/”.end(explode(“/”,$tmpFile)。$\u FILES['Filedata']['name'])
不应该使用witch—任何人都可以提供任何帮助来解释为什么会出现这种情况,以及我如何修复它

需要一个单一变量的表达式(更精确地说是一个数组),而不是函数返回值或任何其他类型的表达式

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

$newLock = "../uploads/".end(explode('/', $tmpFile).$_FILES['Filedata']['name']);
您甚至将这一点远远超出了PHP所能应付的任何级别的处理:

  • 将数组与字符串连接(从而生成字符串)
  • 在该字符串上运行end(),而不是在变量上,甚至不是在数组上
  • 我不知道您试图对代码做什么,但我可以尝试:

    $filename = $_FILES['Filedata']['name'];
    $parts = explode('/', $tmpFile);
    $last = end($parts);
    $newLock = "../uploads/". $last . $filename;
    
    甚至可能只有这个:

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

    ps:看看uploader.php的最后第五行。有一个输入错误:
    json_enocde()
    您有
    echo$methodName。它输出了什么?echo正在调试,jdon_编码是一种类型,修复了allready您的修复为fatel工作,json还没有被调用这就是为什么我至今还没有调试它的原因问题是我的类没有加载线程,这很有效,但有点奇怪,因为我的MVC代码库的其他部分正在使用end(explode(“/”),“stringWithA/InSide”);它返回InSide必须是因为$tmpFile未设置。再次感谢当我可以时,我将标记为asnwer@Martin巴克:好的,我也在这方面,直接在你的问题下看我的评论。那需要更多的调试。
    
    $filename = $_FILES['Filedata']['name'];
    $newLock = "../uploads/". $filename;