Windows下PHP8.0.26中move_uploaded_file/is_uploaded_file不识别SQL上传文件
为何is_uploaded_file与move_uploaded_file不认可POST上传的文件?
我编写了一个带简单表单的脚本,通过POST请求上传文件到网站目录,代码位于网站的include子目录,初始代码如下:
$uploaddir = dirname(dirname(__FILE__)) . '/uploads/'; $sqlfile = $uploaddir . $_FILES['sqlfile']['name']; $tmpfile = $_FILES['sqlfile']['tmp_name']; if (move_uploaded_file($tmpfile, $sqlfile)) { // Use $sqlfile } else { echo "Can't move uploaded file" }
这段代码无法正常运行,于是我尝试了以下写法:
if (is_uploaded_file($tmpfile)) { rename($tmpfile, $sqlfile);
结果依旧失败。
但如果跳过检测(或者写成if (is_uploaded_file($tmpfile) || TRUE)方便后续恢复),rename就能正常执行,文件也能正确保存到uploads目录中。
我可以维持当前代码,但想搞清楚为什么is_uploaded_file和move_uploaded_file都不把我通过POST上传的文件视为有效文件。相关信息如下:
- 上传的是名为
backup_ac6_form_2023_09_05__17_53.sql的SQL脚本,大小约2M,类型为application/octet-stream - 临时文件路径:
C:\myProgs\WampServer64\tmp\php1E7B.tmp $_FILES和$sqlfile的print_r输出:
_FILES _FILES['sqlfile'] _FILES['sqlfile']['name'] "backup_ac6_form_2023_09_05__17_53.sql" _FILES _FILES['sqlfile'] _FILES['sqlfile']['type'] "application/octet-stream" _FILES _FILES['sqlfile'] _FILES['sqlfile']['tmp_name'] "C:\myProgs\WampServer64\tmp\php1E7B.tmp" _FILES _FILES['sqlfile'] _FILES['sqlfile']['error'] "0" _FILES _FILES['sqlfile'] _FILES['sqlfile']['size'] "2061255" sqlfile: "D:/www.acsys.com.fr/next/www/ac6-edit/uploads/backup_ac6_form_2023_09_05__17_53.sql"
希望有人解析is_uploaded_file判定该文件为无效的检测逻辑。
内容的提问来源于stack exchange,提问作者Bernard Dautrevaux
相关产品推荐
相关产品推荐

