PHP Ajax 进度
PHP 中的 Ajax 进度是 Web 页面中非常重要的一个方面。 例如,用户上传文件至 Web 应用程序时,我们可以显示上传进度条,告知用户上传进度,以提高用户体验。我们可以使用 PHP 和 Ajax 显示上传进度条。
在使用 PHP Ajax 显示上传进度条之前,我们需要了解以下术语和技术:
- Ajax - 异步 JavaScript 和 XML。 这使我们能够在不重新加载页面的情况下向服务器发送请求并更新页面上的部分内容。
- XMLHttpRequest - XMLHttpRequest 对象用于在后台向服务器发送请求并获取响应。 它提供了一种使用 AJAX 技术的方式。
- jQuery - jQuery 是一个基于 JavaScript 的库,可使处理 HTML 文档变得更容易。 它为我们提供了许多内置的 AJAX 函数,使使用 AJAX 变得更加简单。
在 PHP Ajax 中显示上传进度条
以下是在 PHP Ajax 中显示上传进度条的步骤:
- 定义一个上传表单
- 编写 PHP 脚本
- 使用 jQuery 和 XMLHttpRequest 显示进度条
<form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form>
该表单将发送到名为 "upload.php" 的脚本。 当用户点击表单中的“提交”按钮时,将调用脚本并将文件作为参数进行上传。
<?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // Check if image file is a actual image or fake image if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // Check file size if ($_FILES["fileToUpload"]["size"] >500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>
这个脚本将检查文件是否是图像,大小是否超过 500KB,是否是允许上传的文件格式。 如果检查通过,则文件将上传到指定的目标文件夹中。
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> </head> <body> <form id="uploadForm" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="button" value="Upload File" onclick="uploadFile()"> </form> <div id="progressBar"></div> <div id="status"></div> <script> function uploadFile() { var inputFile = document.getElementById('fileToUpload').files[0]; var xhr = new XMLHttpRequest(); var formData = new FormData(); formData.append("fileToUpload", inputFile); xhr.upload.addEventListener("progress", function(e) { if (e.lengthComputable) { var percentComplete = Math.round((e.loaded * 100) / e.total); document.getElementById('status').innerHTML = percentComplete + '% uploaded...'; document.getElementById('progressBar').style.width = percentComplete + '%'; } }, false); xhr.open("POST", "upload.php"); xhr.send(formData); } </script> </body> </html>
这个脚本将创建一个表单,其中包含要上传的文件和上传按钮。 在单击按钮时,将运行“uploadFile”函数,该函数将使用 XMLHttpRequest 对象将文件上传到服务器。 该函数还跟踪上传进度,并在用户界面上显示进度条。
总结
PHP 和 Ajax 使我们能够在 Web 页面中轻松显示上传进度条。 使用 XMLHttpRequest 对象,可以在向服务器上传文件时使用 AJAX 技术,以确保页面不会重新加载。 此外,jQuery 库提供内置 AJAX 函数,使使用 AJAX 变得更加简单。