下面我来详细讲解一下“PHP 图片文件上传实现代码”的完整攻略。
HTML表单用于用户上传图片,代码如下:
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">上传图片:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="上传" />
</form>
在这个表单中,我们使用了 enctype="multipart/form-data",这是因为图片和其他数据是以二进制流的形式上传的,而非字符串形式的,因此必须使用这种编码方式。
PHP 的服务器端实现由两部分组成:上传验证和文件处理。
上传验证主要检查文件是否符合要求,同时生成一个唯一的文件名。
<?php
$max_size = 5*1024*1024; // 限制上传文件的大小为5M
$allowed_ext = array('jpg', 'jpeg', 'png', 'gif'); // 允许上传的文件格式
if (isset($_FILES['file'])) {
// 判断上传文件是否出错
if ($_FILES['file']['error']) {
exit($_FILES['file']['error']); // 报告上传错误
}
// 检查文件大小是否符合要求
if ($_FILES['file']['size'] > $max_size) {
exit('文件大小超过5M,上传失败。');
}
// 获取文件的扩展名
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
// 检查文件格式是否符合要求
if (!in_array($ext, $allowed_ext)) {
exit('不允许上传该类型的文件。');
}
// 生成唯一的文件名
$file_name = md5(uniqid()).'.'.$ext;
}
?>
文件处理主要是将上传的文件移动到服务器上指定的目录中。
<?php
if (isset($file_name)) {
$path = "uploads/".$file_name; // 设置上传文件的保存路径
if (move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
echo '上传成功。'; // 输出上传结果
} else {
echo '上传失败。'; // 输出上传结果
}
}
?>
<?php
$max_size = 5*1024*1024; // 限制上传文件的大小为5M
$allowed_ext = array('jpg', 'jpeg', 'png', 'gif'); // 允许上传的文件格式
if (isset($_FILES['file'])) {
// 判断上传文件是否出错
if ($_FILES['file']['error']) {
exit($_FILES['file']['error']); // 报告上传错误
}
// 检查文件大小是否符合要求
if ($_FILES['file']['size'] > $max_size) {
exit('文件大小超过5M,上传失败。');
}
// 获取文件的扩展名
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
// 检查文件格式是否符合要求
if (!in_array($ext, $allowed_ext)) {
exit('不允许上传该类型的文件。');
}
// 生成唯一的文件名
$file_name = md5(uniqid()).'.'.$ext;
}
if (isset($file_name)) {
$path = "uploads/".$file_name; // 设置上传文件的保存路径
if (move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
echo '上传成功。'; // 输出上传结果
} else {
echo '上传失败。'; // 输出上传结果
}
}
?>
注:上传的文件会被保存在 uploads 目录下。
上传一张宽度为 600 像素、高度为 400 像素的 jpg 格式图片。上传成功后,输出“上传成功”。
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">上传图片:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="上传" />
</form>
上传一张宽度为 1200 像素、高度为 800 像素的 bmp 格式图片。上传失败后,输出“不允许上传该类型的文件”。
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">上传图片:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="上传" />
</form>