我想在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中的第一个项目。
答案 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标准。