PHP第二十三篇——文件上传下载实战

既然涉及到PHP开发APP接口,文件上传和下载是在所难免的,也许有些人会考虑第三方的,比如七牛,但是学习和使用终究还是要会的,所以,所以……

文件上传下载实战

以前一直在做iOS,最近转行去搞php开发,总觉得力不从心。这几天有个需求,是关于php的文件上传和下载的。给大家分享下自己的学习资料。

1.先来个请求页面upload.html

<html>  
<head>  
<title>Administration - upload new files</title>  
</head>  
<body>  
<h1>Upload new news files</h1>  
<form enctype="multipart/form-data" action="upload.php" method=post>  
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">  
Upload this file: <input name="userfile" type="file">  
<input type="submit" value="Send File">  
</form>  
</body>  
</html>  

2.php处理客户端请求的数据upload.html

<html>  
<head>  
<title>Uploading...</title>  
</head>  
<body>  
<h1>Uploading file...</h1>  
<?php  

//Check to see if an error code was generated on the upload attempt  
if ($_FILES['userfile']['error'] > 0)  
{  
echo 'Problem: ';  
switch ($_FILES['userfile']['error'])  
{  
case 1:   echo 'File exceeded upload_max_filesize';  
break;  
case 2:   echo 'File exceeded max_file_size';  
break;  
case 3:   echo 'File only partially uploaded';  
break;  
case 4:   echo 'No file uploaded';  
break;  
case 6:   echo 'Cannot upload file: No temp directory specified.';  
break;  
case 7:   echo 'Upload failed: Cannot write to disk.';  
break;  
}  
exit;  
}  

// Does the file have the right MIME type?  
if ($_FILES['userfile']['type'] != 'text/plain')  
{  
echo 'Problem: file is not plain text';  
exit;  
}  

// put the file where we'd like it  
$upfile = '/uploads/'.$_FILES['userfile']['name'];  

if (is_uploaded_file($_FILES['userfile']['tmp_name']))   
{  
if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $upfile))  
{  
echo 'Problem: Could not move file to destination directory';  
exit;  
}  
}   
else   
{  
echo 'Problem: Possible file upload attack. Filename: ';  
echo $_FILES['userfile']['name'];  
exit;  
}  


echo 'File uploaded successfully<br><br>';   

// reformat the file contents  
$fp = fopen($upfile, 'r');  
$contents = fread ($fp, filesize ($upfile));  
fclose ($fp);  

$contents = strip_tags($contents);  
$fp = fopen($upfile, 'w');  
fwrite($fp, $contents);  
fclose($fp);  

// show what was uploaded  
echo 'Preview of uploaded file contents:<br><hr>';  
echo $contents;  
echo '<br><hr>';  

?>  
</body>  
</html>  

3.php文件下载

<?php  

$filePath = "template/";//此处给出你下载的文件在服务器的什么地方  
$fileName = "template.xls";  
//此处给出你下载的文件名  
$file = fopen($filePath . $fileName, "r"); //   打开文件  
//输入文件标签  
Header("Content-type:application/octet-stream ");  
Header("Accept-Ranges:bytes ");  
Header("Accept-Length:   " . filesize($filePath . $fileName));  
Header("Content-Disposition:   attachment;   filename= " . $fileName);  

//   输出文件内容  
echo fread($file, filesize($filePath . $fileName));  
fclose($file);  
exit;  

?>  

总的来说,上面的3个代码段只是简单介绍了php文件的上传下载,还有很多问题要解决,就例如上传大文件的时候怎么处理,批量上传、大文件下载等等问题。当然跟java一样,php也有很多框架可以解决这方面。

坚持原创技术分享,您的支持将鼓励我继续创作!