Php oop文件上传

Php oop file upload

我正在研究 oop php 文件上传脚本。很简单。但不起作用。问题是什么?我学习了如何使用 $_FILE,以及如何编写 oop 风格的代码。

谢谢。

upload.php 是:

<?php
class upload{
    public $src = "./upload/";
    public $tmp;
    public $filename;
    public $type;
    public $uploadfile;

    public function startupload(){
        $this -> filename = $_FILES["file"]["name"];
        $this -> tmp = $_FILES["file"]["tmp_name"];
        $this -> uploadfile = $src . basename($this -> name);
    }
    public function uploadfile(){
        if(move_uploaded_file($this -> tmp, $this -> uploadFile)){
            return true;
        }
    }


}

?>

index.php 是:

<?php 
require_once('./lib/upload.php');
?>

<?php
if(isset($_POST['file'])){
    $fileupload = new upload();
    if($fileupload -> uploadfile()){
        echo 'Fisierul a fost uploadat';
    }
}
?>

<html>
<head></head>
<body>
<form align="center" enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
Select upload file: <input type="file" name="file" required="yes"  />
<input type="submit" value="Trimite" />
<p>
</form>
</body>
</html>

我的想法哪里错了?

对于初学者,您永远不会调用 startupload()。

我建议将该函数移动到构造函数(class 中名为 __construct() 的函数)

将 $_FILES 传递给它,这样您就可以使用输入参数而不是直接使用 $_FILES。

将上传代码更改为:

if(isset($_FILES['file'])){
    $fileupload = new upload();
    $fileupload->startupload();
    if($fileupload -> uploadfile()){
        echo 'Fisierul a fost uploadat';
    }
}

并在您中更改此行 class:

$this -> uploadfile = $this -> src . basename($this -> filename);

此行也需要更新,因为上传文件的大小写错误:

if(move_uploaded_file($this -> tmp, $this -> uploadfile)){

未触发代码中的问题是因为您检查了 post 变量中的变量文件,但您不会在那里找到它。正确的方法是

if(isset($_FILES['file'])) {
    $fileupload = new upload();

    if($fileupload -> uploadfile()) {
        echo 'Fisierul a fost uploadat';
    }
}

此外,您的 class 将不起作用,您应该将变量传递给构造函数并将 upload-> startupload() 重命名为 upload-> upload

您应该创建自己的结构,其中包含 startupload() 函数的完整内容

看看这个:

public function __contruct($string){
    $this -> filename = $_FILES[$string]["name"];
    $this -> tmp = $_FILES[$string]["tmp_name"];
    $this -> uploadfile = $this -> src . basename($this -> filename);
}

那么你不能使用类似的东西:

$fileupload->startupload();

但你只能写:

$fileupload = new upload("file");

最后是小提示: 在PHP中所有类必须大写

function get_image(){
    $type=explode(".",$_FILES['photo']['name']);
    $type=$type[count($type)-1];
    $url="./studentimage/".uniqid(rand()).".".$type;
    if(in_array($type,array('jpeg','jpg','bmp','png'))){
        if(is_uploaded_file($_FILES['photo']['tmp_name'])){
            if(move_uploaded_file($_FILES['photo']['tmp_name'],$url)){
                return $url;
            }
        }
    }
    else{
        return "sorry dose not match my extention";
    }
}