用html上传文件,用PHP密码或rar文件?

时间:2017-10-25 07:29:17

标签: php html encryption zip rar

我无法弄清楚如何使用密码在PHP中压缩文件。密码将是时间和文件名。

这是我到目前为止所做的。

用于上传的HTML代码。

<form enctype="multipart/form-data" action="http://localhost/CSS/addfile.php" method="POST">
<div id="label">
<label>Upload File</label>
</div>
    <input name="doc" type="file" placeholder="Upload File Here" accept="files/topsecret/*" required>
<input type="submit" value="Upload" name="submit">
</form>

PHP代码

function GetImageExtension($filetype)
{
    if(empty($filetype)) return false;
    switch($filetype)
    {
        case 'files/topsecret/bmp': return '.bmp';
        case 'files/topsecret/gif': return '.gif';
        case 'files/topsecret/jpeg': return '.jpg';
        case 'files/topsecret/png': return '.png';
        case 'files/topsecret/txt': return '.txt';
        case 'files/topsecret/doc': return '.doc';
        case 'files/topsecret/docx': return '.docx';
        case 'files/topsecret/pdf': return '.pdf';
        default: return false;
    }
}

$upFile = $_FILES['doc']['name'];
$tmp_name = $_FILES['doc']['tmp_name'];
$ftype = $_FILES['doc']['type'];
$fileExt = GetImageExtension($ftype);

$filename = $upFile.$fileExt;
$target_path="files/topsecret/".$filename;
move_uploaded_file($tmp_name,$target_path);

date_default_timezone_set('Asia/Kuala_Lumpur');
$timefile = date("F j, Y g:ia");
$size = filesize($target_path);
$size = number_format($size / 1024, 2) . ' KB'; 

try{
    $sql = "INSERT INTO file(File_path,Date,Size,Name) VALUES ('".$target_path."','".$timefile."','".$size."','".$filename."')";

    if ($connection->query($sql)){

        echo"<script type= 'text/javascript'>alert('Upload Successfully');</script>";
        header("refresh:2;index.php");
    }else{
        echo "<script type= 'text/javascript'>alert('Upload Not Successfully Inserted.');</script>";
    }

我有研究发现一些PHP的功能,但不知道如何使用它。 喜欢。 ZipArchive :: setEncryptionName ...但不能使用它,因为我在xampp中使用PHP版本7.1.8。

请尽可能简单地帮我解释如何做到这一点。我需要使用zip或rar用密码加密上传的文件。计划使用散列文件名和时间,然后将其设置为密码。

非常感谢。

1 个答案:

答案 0 :(得分:1)

首先,try块需要一个catch。

其次,你不需要GetImageExtension函数,$ _FILES在上传的数组中有扩展名,你需要做的就是print_r($_FILES);才能验证。

遗憾的是,根据我所读到的内容,您还无法对文件进行加密,您需要等待释放php 7.2才能使用$zip->setEncryptionName;

在写完一些代码之后我想出了这个,我认为它可能会有所帮助,但这就是我发布这个答案的原因。

您可以查看:http://php.net/manual/en/filters.encryption.php,这是集成到下面代码中的一个很好的选择,我现在没有时间,但按照他们的示例进行操作相当容易。

if(isset($_POST['submit'])){
    upload($_FILES);
}

class Connection {
    protected $db = null;

    public function db(){
        if($this->db === null){
            try {
                $this->db = new PDO('mysql:host=localhost;dbname=name; charset=utf8', user, password);
            } catch (PDOException $e) {
                echo 'Connection failed: ' . $e->getMessage();
            }
        }
        return $this->db;
    }
}

function upload($file_data){

    // calling this statically, don't suggest it
    $conn = Connetion::db();

    $name = $file_data['doc']['name'];
    $tmp_name = $file_data['doc']['tmp_name'];
    $extension = explode('/', $file_data['doc']['type']); // $extension[1] returns file type.
    $image_size = getimagesize($tmp_name);

    $file_name = $name . '.' . $extension[1];
    $target_path = "";

    if($image_size !== false){

        $zip = new ZipArchive();
        if ($zip->open('uploaded_file.zip', ZipArchive::CREATE) === TRUE) {
            $zip->addFromString("text.txt", "#1 This is a test string added as testfilephp.txt.\n");
            $zip->setEncryptionName('text.txt', ZipArchive::EM_AES_256, 'secret'); // here we'd set the password 
            $zip->close();
            $zip_created = true;
        } else {
            $zip_created = false;
        }   

        // if zip was created and uploaded the file, then we upload it to the database
        if($zip_created == true){
            $sth = $conn->prepare('INSERT INTO file (file_path, `date`, size, name) VALUES (:target_path, :time_file, :size, :file_name)');
            $sth->bindValue(':target_path', $target_path, PDO::PARAM_STR);
            $sth->bindValue(':time_file', date('m-d-Y H:i:s'), PDO::PARAM_STR);
            $sth->bindValue(':target_path', $target_path, PDO::PARAM_STR);
            $sth->bindValue(':file_name', $file_name, PDO::PARAM_STR);
            $sth->execute();
        } else  {
            // here we can upload the error to the database or do nothing
        }
    }
}

?>

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="doc">
    <input type="submit" value="Upload" name="submit">
</form>