php类路径不是调用其方法的文件路径

时间:2015-07-16 00:40:35

标签: php realpath

我想在php中创建一个类来上传文件并在执行之前验证文件信息。 我的类不在根目录中。结构是这样的:

-project
    -root
        index.php
-src
    -classes
        class.file.php
    -files
        myFile.txt

我的文件类是这样的:

<?php
Class File {
    public function uploadFile($file) {
        $target = "../files/" . basename($file['name']);
        //some additional validation
        if(move_uploaded_file($file['tmp_name']) {
            return true;
        } else {
            return false;
        }
    }
}

最后我的索引文件是:

<?php
include '/../../classes/class.file.php';
$objFile = new File();
if(isset($_POST['uploadFile']) && isset($_FILES['txtFile'])) {
    if($objFile->uploadFile($_FILES['txtFile')) {
        echo "file uploaded";
    } else {
        echo "file not uploaded";
    }
}
?>

我遇到的问题是,只有当相对目标路径来自调用方法的php文件时,这才会起作用。我无法使用绝对路径。如何将uploadFile方法设置为使用正确的路径,无论它在何处被调用? 请好,这是我在php中的第一个项目。

3 个答案:

答案 0 :(得分:0)

而不是     include '/../../classes/class.file.php'; 使用:     include dirname(FILE).'/../../classes/class.file.php';

答案 1 :(得分:0)

您正在使用包含的绝对文件路径(使用前导斜杠)但您在文件类中使用相对文件路径作为上传位置($target)。

尝试切换到绝对文件路径。此外,使用realpath function__DIR__以及__FILE__ magic constants会对您有所帮助。

答案 2 :(得分:0)

如果您使用自动加载器,则可以相对于自动加载器路径制作所有包含。

更好的是,您可以使用Composer并将项目配置为使用PSR-0或PSR-4标准。