简体   繁体   English

使用 PHP 上传文件

[英]Upload a file using PHP

I want to upload a file to a given folder.我想将文件上传到给定的文件夹。

<?php
$folder = "upload/";
if (is_uploaded_file($HTTP_POST_FILES['filename']['tmp_name']))  {   
    if (move_uploaded_file($HTTP_POST_FILES['filename']['tmp_name'], $folder.$HTTP_POST_FILES['filename']['name'])) {
         echo "File uploaded";
    } else {
         echo "File not moved to destination folder. Check permissions";
    };
} else {s
     echo "File is not uploaded";
}; 
?>

The error is:错误是:

Notice: Undefined variable: HTTP_POST_FILES in C:\wamp\www\sdg\import\ips.php on line 3注意:未定义变量:第 3 行 C:\wamp\www\sdg\import\ips.php 中的 HTTP_POST_FILES

Below is one way to upload files, there are many other ways.下面是上传文件的一种方式,还有很多其他方式。

As @nordenheim said, $HTTP_POST_FILES has been deprecated since PHP 4.1.0, thus not advisable to use so.正如@nordenheim 所说, $HTTP_POST_FILES自 PHP 4.1.0 起已被弃用,因此不建议使用。

PHP Code (upload.php) PHP 代码 (upload.php)

<?php
$target_dir = "upload/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);

// Check if image file is a actual image or fake image
if (isset($_POST["submit"])) {

    if ($target_file == "upload/") {
        $msg = "cannot be empty";
        $uploadOk = 0;
    } // Check if file already exists
    else if (file_exists($target_file)) {
        $msg = "Sorry, file already exists.";
        $uploadOk = 0;
    } // Check file size
    else if ($_FILES["fileToUpload"]["size"] > 5000000) {
        $msg = "Sorry, your file is too large.";
        $uploadOk = 0;
    } // Check if $uploadOk is set to 0 by an error
    else if ($uploadOk == 0) {
        $msg = "Sorry, your file was not uploaded.";

        // if everything is ok, try to upload file
    } else {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            $msg = "The file " . basename($_FILES["fileToUpload"]["name"]) . " has been uploaded.";
        }
    }
}

?>

HTML Code to start function启动函数的 HTML 代码

<form action="upload.php" method="post" id="myForm" enctype="multipart/form-data">
    Select file to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <button name="submit" class="btn btn-primary" type="submit" value="submit">Upload File</button>
 </form>

Hope this helps.希望这可以帮助。

PHP 4.1 introduced the superglobals . PHP 4.1 引入了超全局变量 They replace the old, long-named arrays that contain the data extracted from the request.它们替换包含从请求中提取的数据的旧的、长命名的数组。 $_FILES[] replaced $HTTP_POST_FILES[] , $_GET[] replaced $HTTP_GET_VARS[] and so on $_FILES[]替换了$HTTP_POST_FILES[]$_GET[]替换了$HTTP_GET_VARS[]等等

For subsequent PHP 4 versions the old and the new arrays were available side by side.对于后续的 PHP 4 版本,旧数组和新数组可以并行使用。 PHP 5 by default disabled the generation of the old arrays and introduced the php.ini directive register_long_arrays that could be used to re-enable the creation of the old arrays. PHP 5 默认禁用旧数组的生成,并引入了php.ini指令register_long_arrays可用于重新启用旧数组的创建。

Since PHP 5.4 the old long-named arrays were removed completely and register_long_arrays went together with them.从 PHP 5.4 开始,旧的长命名数组被完全删除,并且register_long_arrays与它们一起使用。

Conclusion: You are learning from a very old or very bad tutorial.结论:您正在从一个非常古老或非常糟糕的教程中学习。 Find a better one.找一个更好的。

 public static function uploadFile($filepath="upload",$existCheck=0,$uniq=0){
   global $_FILES;
   try {
        // Undefined | Multiple Files | $_FILES Corruption Attack
        // If this request falls under any of them, treat it invalid.
        if (
            !isset($_FILES['uploaded_file']['error']) ||
            is_array($_FILES['uploaded_file']['error'])
        ) {
            $result["status"]="fail";$result["errors"]=('Invalid parameters.');return $result;
        }


        // Check $_FILES['uploaded_file']['error'] value.
        switch ($_FILES['uploaded_file']['error']) {
            case UPLOAD_ERR_OK:
                break;
            case UPLOAD_ERR_NO_FILE:
                $result["status"]="fail";$result["errors"]=('No file sent.');return $result;
            case UPLOAD_ERR_INI_SIZE:
            case UPLOAD_ERR_FORM_SIZE:
                $result["status"]="fail";$result["errors"]=('Exceeded filesize limit.');return $result;
            default:
                $result["status"]="fail";$result["errors"]=('Unknown errors.');return $result;
        }

        // You should also check filesize here. 
        if ($_FILES['uploaded_file']['size'] > 1000000) {
            $result["status"]="fail";$result["errors"]=('Exceeded filesize limit.');return $result;
        }

        // DO NOT TRUST $_FILES['uploaded_file']['mime'] VALUE !!
        // Check MIME Type by yourself.
        $finfo = new finfo(FILEINFO_MIME_TYPE);
        if (false === $ext = array_search(
            $finfo->file($_FILES['uploaded_file']['tmp_name']),
            array(
                'jpg' => 'image/jpeg',
                'png' => 'image/png',
                'gif' => 'image/gif',
            ),
            true
        )) {
            $result["status"]="fail";$result["errors"]=('Invalid file format.');return $result;
        }
        if($uniq==0){
            $temp=$filepath;
        }
        else{
            $temp=$filepath."/".uniqid()."_".$_FILES['uploaded_file']['name'];
        }

        if ($existCheck==1 && file_exists($temp)) {
            $result["status"]="fail";$result["errors"]=('Unknown errors.');return $result;
        }
        if(@copy($_FILES['uploaded_file']['tmp_name'], $temp)) {
            return $result["status"]="success";
        } 
        $result["status"]="fail";$result["errors"]=('Unknown errors.');return $result;

    } catch (Exception $e) {

            $result["status"]="fail";$result["errors"]= $e->getMessage();return $result;

    }
}

First, write your html code like this, and don't forget to add enctype="multipart/form-data"首先,像这样写你的html代码,不要忘记加上enctype="multipart/form-data"

<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>

Then create a file name called upload.php然后创建一个名为upload.php的文件名

<?php
$path = "form/";
$target_file =  $path.basename($_FILES["fileToUpload"]["name"]);
$file=$_FILES['fileToUpload']['name'];    
$result = move_uploaded_file($_FILES['fileToUpload']['tmp_name'],$target_file.$file);
if ($result) {
    echo "file successfully uploaded";
}
else {
    echo "please select your file";
}

You should try this你应该试试这个

    $fileType = $_FILES['profileimage']['type'];
    $fileName = $_FILES['profileimage']['name'];

    $array = explode(".", $fileName);
    $ext  = $array[count($array)-1];

     $imageAutoName = "profileimagehr".$rsinssupp.".".$ext;


    if(!move_uploaded_file($_FILES['profileimage']['tmp_name'],'img/user/'.$imageAutoName))     
    {
      $msg = "";
    }
    else
    {
      $iquery = "UPDATE tblname SET  filane = '".$imageAutoName."' WHERE id = ".$rsinssupp."";
      $obj->edit($iquery);
    }

index.php索引.php

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $extensions= array("jpeg","jpg","png");
      move_uploaded_file($file_tmp,"images/".$file_name);     
   }
?>
<html>
   <body>

      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
      </form>

   </body>
</html>

create one images folder in your project folder and run this file.在您的项目文件夹中创建一个图像文件夹并运行此文件。

Hi you can use phpUpload class嗨,您可以使用phpUpload

$pUp = new phpUpload($_FILES['file']);

//$pUp->maxSize('1024');

//$pUp->allowedType(["image/jpeg", "image/png"]);

//$pUp->newName("New_name");

$pUp->run('destination/folder'); // Move the file to a specific folder

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM