我想将文件上传到云端。云端有3个文件夹,如P1,P2和P3。 我上传图像(所有格式),音频文件,视频文件,ppt,pptx,doc,docx,pdf和文本文件。我想在上传之前做这些事情。
所以相同类型的文件以相应的字母和数字开头,这些字母和数字必须是唯一的,然后是从时间到结束时间。 (对于ppt以P开头,pptx以PX开头,doc为D,docx为DX,pdf为PF,文本为T,音频为A,视频为V)
并且第一个YYYYMMDDHHMMSS正在开始。 第二个YYYYMMDDHHMMSS是结束时间。
在PHP上传时我将如何做到这一点。
答案 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的恶意文件