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";
}
}
我正在研究 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";
}
}