php如何实现上传
文件上传的基本实现
在PHP中实现文件上传需要使用$_FILES超全局数组和move_uploaded_file()函数。创建一个包含文件上传表单的HTML页面,表单必须设置enctype="multipart/form-data"属性。

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload">
<input type="submit" value="Upload File">
</form>
处理上传的PHP代码
在服务器端脚本中,检查文件是否被正确上传,并执行必要的验证和安全检查。

$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 检查文件是否为真实的图片(可选)
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
$uploadOk = 1;
} else {
$uploadOk = 0;
}
}
// 检查文件是否已存在
if (file_exists($targetFile)) {
$uploadOk = 0;
}
// 限制文件大小(例如5MB)
if ($_FILES["fileToUpload"]["size"] > 5000000) {
$uploadOk = 0;
}
// 允许特定的文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
$uploadOk = 0;
}
// 检查$uploadOk是否为0,表示有错误
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
echo "The file ". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
安全注意事项
确保上传目录的权限设置正确,通常设置为755。限制上传文件的类型和大小,防止恶意文件上传。对上传的文件进行重命名,避免文件名冲突和潜在的安全问题。
$newFileName = uniqid() . '.' . $imageFileType;
$targetFile = $targetDir . $newFileName;
多文件上传
HTML表单可以通过设置multiple属性允许一次上传多个文件。在PHP中,使用$_FILES数组的特定结构处理多个文件。
<input type="file" name="filesToUpload[]" multiple>
foreach ($_FILES["filesToUpload"]["tmp_name"] as $key => $tmp_name) {
$targetFile = $targetDir . basename($_FILES["filesToUpload"]["name"][$key]);
move_uploaded_file($tmp_name, $targetFile);
}






