php实现文件传输
PHP实现文件上传
使用PHP的$_FILES超全局变量处理文件上传,表单需设置enctype="multipart/form-data"属性。
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload">
<input type="submit" value="Upload">
</form>
PHP处理脚本示例:
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile);
PHP实现文件下载
通过设置HTTP头实现文件下载:
$filePath = 'path/to/file.ext';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filePath).'"');
readfile($filePath);
exit;
大文件分块传输
对于大文件传输,可采用分块处理方式:
// 上传分块处理
$chunk = $_FILES['file']['tmp_name'];
$chunkNumber = $_POST['chunk'];
$totalChunks = $_POST['totalChunks'];
// 下载分块处理
$file = 'large_file.zip';
$chunkSize = 1024 * 1024; // 1MB
$handle = fopen($file, 'rb');
fseek($handle, $_GET['offset']);
echo fread($handle, $chunkSize);
安全注意事项
验证文件类型和大小:
$allowedTypes = ['image/jpeg', 'image/png'];
$maxSize = 5 * 1024 * 1024; // 5MB
if (!in_array($_FILES['file']['type'], $allowedTypes)) {
die('Invalid file type');
}
if ($_FILES['file']['size'] > $maxSize) {
die('File too large');
}
存储上传文件时使用随机文件名:
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$newFilename = uniqid().'.'.$extension;
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$newFilename);






