Kali Linux XAMPP环境下PHP move_uploaded_file无报错不生效排查
Kali Linux XAMPP PHP文件上传失效问题解决方案
1. 核心代码错误
你写的move_uploaded_file函数参数使用错误,这是最直接的失效原因:
该函数第一个参数必须是上传后服务端生成的临时文件路径,也就是你提前定义的
$tmp_name变量,但你错误传入了新生成的文件名$newFileName,系统找不到对应文件自然无法移动。
错误行修正为:
move_uploaded_file($tmp_name, $fileDestination);
另外你提供的代码末尾多了一个多余的},直接删除即可避免语法错误。
2. 环境配置类问题排查
如果修正代码后仍无法正常上传,按以下顺序排查:
- 检查uploads目录权限:XAMPP在Kali Linux中默认以
daemon用户运行,需确保你的上传目录有可写入权限,可执行命令配置:# 临时赋权测试用 sudo chmod 777 /opt/lampp/htdocs/你的项目路径/uploads # 生产环境更安全的赋权方式 sudo chown daemon:daemon /opt/lampp/htdocs/你的项目路径/uploads - 检查前端表单配置:提交文件的form标签必须添加
enctype="multipart/form-data"属性,否则文件不会被正常上传到服务端,示例如下:<form action="" method="post" enctype="multipart/form-data"> - 检查PHP配置项:打开XAMPP的php.ini配置文件,确认如下配置:
file_uploads = On已开启文件上传功能upload_max_filesize数值大于你上传的文件大小,默认通常为2Mpost_max_size数值大于upload_max_filesize的值
- 开启调试错误提示:在代码开头添加两行配置,就能显示原本被隐藏的报错信息,方便定位问题:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); // 后面接你原来的业务代码
3. 其他注意事项
使用header("Location:xxx")跳转之前不能有任何输出内容,包括代码开头的空格、换行、HTML标签,否则会引发头输出已发送的报错,跳转逻辑失效。
修正后的完整代码示例:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); if(isset($_POST['submit'])){ $file = $_FILES['file']; $name = $_FILES['file']['name']; $tmp_name = $_FILES['file']['tmp_name']; $size = $_FILES['file']['size']; $error = $_FILES['file']['error']; $tempExtension = explode('.', $name); $fileExtension = strtolower(end($tempExtension)); $isAllowed = array('jpg', 'jpeg', 'png', 'pdf'); if (in_array($fileExtension, $isAllowed)) { if ($error === 0) { if ($size < 100000) { $newFileName = uniqid('',true) . "." . $fileExtension; $fileDestination = "uploads/" . $newFileName; move_uploaded_file($tmp_name, $fileDestination); header("Location: index.php?uploadedsuccessfully"); exit(); }else{ echo "Your size is too big"; } }else{ echo "There was an error. Try again"; } } else{ echo "Your file type is not accepted"; } } ?>
内容的提问来源于stack exchange,提问作者user14416725
相关产品推荐
相关产品推荐

