将用户输入的时间添加到文件名并使用php上传到特定文件夹


add user entered time to filename and upload to specific folders using php

我想上传文件到云端。云中有3个文件夹,如P1,P2和P3。我上传图像(所有格式),音频文件,视频文件,ppt,pptx,doc,docx,pdf和文本文件。我想在上传之前做这些事情。

  1. 生成文件名为J1_YYYYMMDDHHMMSS_YYYYMMDDHHMMSS.jpg和j_yyyymmddhhmmss .jpg的第二个jpeg图像为j2_yyyymmddhhmmss .jpg,等等。

所以相同类型的文件以各自的字母和数字开始,必须是唯一的,然后是开始时间,然后是结束时间。(对于以P开头的ppt, pptx为PX, doc为D, docx为DX, pdf为PF,文本为T,音频为A,视频为V)

和第一个YYYYMMDDHHMMSS是起始周期。第二个YYYYMMDDHHMMSS为结束时间。

<form action="send.php" enctype="multipart/form-data"><input type="file" name="var-trigger"></form>

PHP创建数组$_FILES

在本例中,$_FILES['var-trigger']

$_FILES['var-trigger']后的第二个数组:

$_FILES['var-trigger']['tmp_name']
$_FILES['var-trigger']['name']
$_FILES['var-trigger']['size']
$_FILES['var-trigger']['type'] //text/plain, image/png et cetera

使用if语句和preg_match:

 if (preg_match('/^image'/gif$/i', $_FILES['var-trigger']['type'])) { $ext='gif';} 
 else if (preg_match('/^image'/(x-)?png$/i', $_FILES['var-trigger']['type'])) { $ext='png';} 
 if ($ext=='png') {$file_title= 'P'; }
 else if ($ext=='gif') {$file_title= 'G'; }
<?php 
// integer starts at 0 before counting
$i = 0; 
$dir = $ext;
if ($handle = opendir($dir)) {
    while (($file = readdir($handle)) !== false){
        if (!in_array($file, array('.', '..')) && !is_dir($dir.$file)) 
            $i++;
    }
}
// prints out how many were in the directory
echo "There were $i files";
?>
$filename = 'direction'. $file_title . $i . time() . $SERVER['REMOTE_ADDR'] . $ext;
if(!is_uploaded_file($_FILES['var-trigger']['tmp_name']) or !copy($_FILES['var-trigger']['tmp_name'],$filename)) { echo 'error'; exit(); }

$SERVER['REMOTE_ADDR']避免同时上传2个文件

Count how many files in directory php

!Is_upload_file行用于防止使用/etc/

等文件名的恶意文件