PHP的文件上传是比Java简单很多。
在php.ini配置文件中有几个关于文件上传相关的设置:
file_uploads | 控制是否允许文件上传 |
upload_tmp_dir | 文件上传过程的临时目录 |
upload_max_filesize | 允许上传的最大的文件大小,默认是2M |
post_max_size | POST数据的最大大小,默认是8M,序大于upload_max_filesize的设置 |
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<form action="fileupload.php" method="post" enctype="multipart/form-data">
<label for="filename">File:</label>
<input type=file name="filename" /><br/>
<input type=submit value="upload"/>
</form>
</body>
</html>
上面的表单提交到服务器端后,服务器端接收的相关信息时保存在$_FILES['filename']数组中的。
用var_dump()函数输出$_FILES['filename']的内容,输出结果为:
array(5) {
["name"]=>string(22) "boilerstrap-master.zip"
["type"]=>string(24) "application/octet-stream"
["tmp_name"]=>string(33) "D:\php\php-5.4.16\tmp\php2F92.tmp"
["error"]=>int(0)
["size"]=>int(719451)
}
根据上面的输出信息,于是可以方便获得文件的一些信息如临时文件的路径可以通过$_FILES['filename']['tmp_name']获得等。
根据这些信息,我们就能方便编写服务器端的代码处理上传的过程。
<?php
echo '<h2>File information:</h2>';
echo '<pre>';
var_dump($_FILES['filename']);
echo '</pre>';
define('UPLOAD_PATH',dirname(__FILE__).'/upload');
$path = UPLOAD_PATH.'/'.$_FILES['filename']['name'];
if(is_uploaded_file($_FILES['filename']['tmp_name'])){
if (! move_uploaded_file($_FILES['filename']['tmp_name'], $path)) {
echo 'Problem: Could not move file to destination directory ';
exit;
}else{
echo "file is Successfully uploaded";
}
}
$_FILES['filename']['error']保存了上传错误的error code,是数字类型的。
UPLOAD_ERROR_OK , value 0 无错误
UPLOAD_ERR_INI_SIZE, value 1 上传的文件大小超过了upload_max_file-size变量(php.ini中)保存的值
UPLOAD_ERR_FORM_SIZE , value 2 文件的大小超过了提交表单中MAX_FILE_SIZE指定的值
UPLOAD_ERR_PARTIAL , value 3 文件只上传了一部分
UPLOAD_ERR_NO_FILE , value 4 没有发现有文件上传
UPLOAD_ERR_NO_TMP_DIR, value 6 php.ini配置中没有配置临时目录
UPLOAD_ERR_CANT_WRITE, value 7 写入磁盘错误