树莓派PHP文件上传如何保留原文件名而非随机命名?
保留上传文件原文件名的修改方案
嘿,我看了你的代码,要保留原文件名其实很简单,核心就是改掉生成随机文件名的那一行。咱们一步步来:
首先,你的代码里这一行是生成随机文件名的关键:
$file_name_new = uniqid('', true) . '.' . $file_ext;
你已经从$_FILES['file']['name']获取到了原文件名$file_name,直接用它替换掉随机生成的文件名就行。
修改后的完整代码
<!DOCTYPE html> <html> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="upload"> </form> <?php if(isset($_FILES['file'])) { $file = $_FILES['file']; $file_name = $file['name']; $file_tmp = $file['tmp_name']; $file_size = $file['size']; $file_error = $file['error']; $file_ext = explode('.', $file_name); $file_ext = strtolower(end($file_ext)); // 注意:你当前只允许txt和jpg格式,若要支持任意扩展名,可修改/移除下面的allowed数组和检查 $allowed = array('txt', 'jpg'); if(in_array($file_ext, $allowed)) { if($file_error === 0) { if($file_size <= 1073741824) { // 直接使用原文件名,不再生成随机名 $file_destination = './files/' . $file_name; if(move_uploaded_file($file_tmp, $file_destination)) { echo "文件上传成功,路径:" . $file_destination; } else { echo "文件移动失败,请检查files目录权限"; } } else { echo "文件大小超过限制(最大支持1GB)"; } } else { echo "上传出错,错误代码:" . $file_error; } } else { echo "不允许的文件扩展名"; } } ?> </body> </html>
额外提示:避免同名文件覆盖
上面的修改会直接使用原文件名,但如果有用户上传同名文件,新文件会覆盖旧文件。如果想避免这个问题,可以给原文件名加个唯一标识(比如时间戳),示例代码如下:
// 保留原文件名主体,添加时间戳避免覆盖 $file_base_name = pathinfo($file_name, PATHINFO_FILENAME); $file_name_new = $file_base_name . '_' . time() . '.' . $file_ext; $file_destination = './files/' . $file_name_new;
这样既保留了原文件名的辨识度,又不会因为重名丢失旧文件。
另外,你提到想要搭建支持任意扩展名文件的服务,当前代码里的$allowed数组只允许txt和jpg,你可以把这个数组改成空数组,或者直接移除in_array的检查逻辑,比如:
// 移除扩展名限制,允许所有类型文件上传 // $allowed = array('txt', 'jpg'); // if(in_array($file_ext, $allowed)) { if(true) { // 替换成这个判断,或者直接删除整个if块
内容的提问来源于stack exchange,提问作者Dr Jay
相关产品推荐
相关产品推荐

