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

时间:2014-03-28 11:28:19

标签: php

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

  1. 生成文件名为 对于jpeg图像J1_YYYYMMDDHHMMSS_YYYYMMDDHHMMSS.jpg和第二个jpeg img为J2_YYYYMMDDHHMMSS_YYYYMMDDHHMMSS.jpg等等。
  2. 所以相同类型的文件以相应的字母和数字开头,这些字母和数字必须是唯一的,然后是从时间到结束时间。 (对于ppt以P开头,pptx以PX开头,doc为D,docx为DX,pdf为PF,文本为T,音频为A,视频为V)

    并且第一个YYYYMMDDHHMMSS正在开始。 第二个YYYYMMDDHHMMSS是结束时间。

    在PHP上传时我将如何做到这一点。

1 个答案:

答案 0 :(得分:0)

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

PHP创建名为$ _FILES

的数组

在此案例中使用表单中的名称输入此数组$ _FILES [&#39; var-trigger&#39;]

在$ _FILES [&#39; var-trigger&#39;]之后你已经在第二个数组旁边了:

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

使用if statment和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 [&#39; REMOTE_ADDR&#39;]以避免同时上传2个文件

来自Count how many files in directory php

的代码

!is_upload_file行是为了防止使用/ etc /

之类的filname的恶意文件