【问题标题】:Php oop file uploadphp oop 文件上传
【发布时间】:2015-07-15 13:56:51
【问题描述】:

我在 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>

我的修补有什么问题?

【问题讨论】:

    标签: php oop upload


    【解决方案1】:

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

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

    更多你的类将无法工作,你应该将变量传递给构造函数并将upload-> startupload()重命名为upload->upload

    【讨论】:

      【解决方案2】:

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

      我建议将该函数移至构造函数(类中名为 __construct() 的函数)

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

      【讨论】:

      • 代码还有其他问题,但是如果您正在尝试学习 oop,您将在适当的时候找到这些问题... :)
      【解决方案3】:

      将上传代码改为:

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

      并在你的班级中更改这一行:

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

      此行也需要更新,因为上传文件的情况错误:

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

      【讨论】:

        【解决方案4】:

        您应该创建自己的结构,其中将包含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 中,所有类都必须大写

        【讨论】:

        • 类名不必以大写字母开头(想想mysqli),它们只需要在与声明相同的情况下被引用。然而,最好的做法是在camel case.
        • 是的,根据 PSR 标准,您甚至必须在 CamelCase 中声明类;)谢谢
        【解决方案5】:
        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";
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2012-11-02
          • 1970-01-01
          • 2011-12-20
          • 2014-07-14
          • 2011-01-26
          • 2017-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多