PHP文件编辑上传
在Web应用程序开发中,文件上传是常见但又至关重要的功能之一。在旧的 Web 应用程序中,上传文件是一个困难的步骤,但现在在 PHP 中上传文件非常容易。
1。上传文件到服务器
文件上传是通过HTTP协议和POST方法完成的。 HTML 中的 标签允许您创建表单。使用 enctype="multipart/form-data" 属性指定的表单可以上传二进制文件,并且要上传的文件是使用 input type="file" 标签指定的。
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">文件上传:</label>
<input type="file" name="file" id="file">
<input type="submit" name="submit" value="上传">
</form>
使用 $_FILES 变量通过 PHP 脚本处理上传的文件。 $_FILES 是之前所需表单中输入 type="file" 标签的名称。
<?php
$target_dir = "uploads/"; //定义上传文件存储目录
$target_file = $target_dir . basename($_FILES["file"]["name"]); //获取上传的文件名
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); //获取上传的文件扩展名
// 检查文件是否存在
if (file_exists($target_file)) {
echo "文件已存在";
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["file"]["size"] > 500000) {
echo "文件过大";
$uploadOk = 0;
}
// 允许特定文件格式上传
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "仅允许上传 JPG, JPEG, PNG & GIF 文件";
$uploadOk = 0;
}
// 检查上传是否成功
if ($uploadOk == 0) {
echo "上传失败";
} else {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
echo "文件上传成功";
} else {
echo "上传失败";
}
}
?>
2。上传文件时的错误处理
文件上传过程中可能会出现错误,需要进行一些错误处理。了解这些错误通常需要代码中的错误并查看 HTTP 错误代码。以下是一些常见的文件上传错误:
- UPLOAD_ERR_INI_SIZE:文件太大,超出了PHP指令中upload_max_filesize的值。
- UPLOAD_ERR_FORM_SIZE:文件太大,超出了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
- UPLOAD_ERR_PARTIAL:仅上传了部分文件。
- UPLOAD_ERR_NO_FILE:没有上传文件。
- UPLOAD_ERR_NO_TMP_DIR:临时目录丢失。
- UPLOAD_ERR_CANT_WRITE:无法写入磁盘。
- UPLOAD_ERR_EXTENSION:文件上传被 PHP 扩展阻止。
通过检查变量$_FILES['file']['error']判断上传是否成功。返回ERR_OK表示上传成功,返回其他值表示上传失败。
<?php
if ($_FILES['file']['error'] == UPLOAD_ERR_OK) {
// 此时变量$_FILES['file']['tmp_name']中存储着上传文件的临时文件名
$name = $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $name);
echo "文件上传成功";
} else {
// 文件上传失败
switch ($_FILES['file']['error']) {
case UPLOAD_ERR_INI_SIZE:
echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。";
break;
case UPLOAD_ERR_FORM_SIZE:
echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。";
break;
case UPLOAD_ERR_PARTIAL:
echo "文件上传不完整。";
break;
case UPLOAD_ERR_NO_FILE:
echo "没有文件被上传。";
break;
default:
echo "文件上传失败,请重新尝试上传。";
}
}
?>
3。将上传的文件发送至您的邮箱
文件上传后,您可以通过电子邮件发送上传的文件。 PHP通过其内置的mail()函数可以方便地发送电子邮件,这需要在服务器上安装和配置电子邮件服务器。
<?php
$to = "johndoe@example.com";
$subject = "有新的文件上传";
$message = "请查收新上传的文件。...";
$file = "uploads/文件名.jpg"; //附件文件路径
$filename = "文件名.jpg"; //附件名称
$content = file_get_contents($file);
$content = chunk_split(base64_encode($content));
// 头部信息
$uid = md5(uniqid(time()));
$header = "From: webmaster@example.com" . "\r\n";
$header .= "Reply-To: webmaster@example.com" . "\r\n";
$header .= "MIME-Version: 1.0" . "\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
$body = "--" . $uid . "\r\n";
$body .= "Content-Type: text/plain; charset=UTF-8\r\n";
$body .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$body .= $message . "\r\n";
$body .= "--" . $uid . "\r\n";
$body .= "Content-Type: application/octet-stream\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n";
$body .= "Content-Disposition: attachment; filename=\"" . $filename . "\"\r\n\r\n";
$body .= $content . "\r\n";
$body .= "--" . $uid . "--";
if (mail($to, $subject, $body, $header)) {
echo "电子邮件已发送至 $to";
} else {
echo "发送邮件失败,请稍后再试。";
}
?>
4。使用Ajax上传文件
要上传文件而不刷新页面,可以使用Ajax。 HTML5 提供了一个新的 JavaScript API:FormData。使用 FormData 对象上传 Ajax 文件:
<script>
var formData = new FormData();
var fileField = document.querySelector("input[type='file']");
formData.append('file', fileField.files[0]);
var xhr = new XMLHttpRequest();
xhr.open("POST", "upload.php");
xhr.send(formData);
</script>
为了避免页面刷新,我们可以使用jQuery的Ajax方法来完成文件上传。 jQuery FormData 也可用于以这种方式将表单数据和二进制文件发送到服务器。
<script>
$(document).ready(function(){
$('form').submit(function(event){
event.preventDefault();
var formData = new FormData($('form')[0]);
$.ajax({
url: 'upload.php',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data){
alert(data);
},
error: function(jqXHR, textStatus, errorThrown){
console.log(textStatus, errorThrown);
}
});
});
});
</script>
5。总结
本文介绍了如何使用 PHP 进行文件上传,并涵盖了常见的文件上传错误。它还解释了如何通过电子邮件上传文件以及如何使用 Ajax 上传文件。对于初学者来说,希望通过这篇文章来练习文件上传的知识,掌握文件上传的技巧,以便能够更好的运用到实际的项目开发中。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网