move_uploaded_file上传中文文件名失败

今天用php的move_uploaded_file方法保存前端上传的中文名称文件时,方法返回false,调试时错误码为2,错误信息为:

move_uploaded_file(D:\git_prj\xx\think\Public\attachment/upload/员工年休假说明.docx): failed to open stream: Invalid argument。

在网上搜了下原因,linux下一般是由于目标目录没有写权限。但是我这个是windows目录,不存在权限的问题,而且我开发时用数字命名的文件名,测试正常。再继续找原因,发现是中文编码的问题。保存文件时,需要将中文由utf8转为gb2312,确实有点让人费解:(

$attachment = $_FILES['attachment'];

$name = iconv("UTF-8", "gb2312", $attachment['name']);

move_uploaded_file($attachment['tmp_name'], DOCROOT."attachment/upload/{$name }");

偷偷纠正一句,目标路径是可以用相对路径的偷笑

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正确答案是 C。 在 PHP 中,可以使用 `move_uploaded_file` 函数将上传的文件从临时文件夹移动到指定位置。这个函数的语法如下: ```php move_uploaded_file(string $filename, string $destination): bool ``` 其中,`$filename` 表示上传文件的临时文件名,`$destination` 表示文件移动的目标位置。如果文件移动成功,则返回 `true`,否则返回 `false`。 例如,假设上传文件的表单中有一个名为 `file` 的文件域,上传后的临时文件名为 `/tmp/phpabc123`,需要将其移动到网站根目录下的 `uploads` 目录中,可以使用以下代码: ```php if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { $tmp_name = $_FILES['file']['tmp_name']; $dest_name = 'uploads/' . $_FILES['file']['name']; if (move_uploaded_file($tmp_name, $dest_name)) { echo '文件上传成功'; } else { echo '文件上传失败'; } } else { echo '上传文件失败'; } ``` 在上面的代码中,首先判断文件上传是否成功,如果成功则获取临时文件名 `$tmp_name` 和目标文件名 `$dest_name`,然后使用 `move_uploaded_file` 函数将文件移动到目标位置。如果移动成功,则输出 `文件上传成功`,否则输出 `文件上传失败`。 因此,选项 C 中的 `move_uploaded_file` 是把文件从临时文件夹移到指定位置使用的函数。选项 A 中的 `mkdir` 是创建目录的函数;选项 B 中的 `unlink` 是删除文件的函数;选项 D 中的 `file_exists` 是检查文件是否存在的函数,都不是把文件从临时文件夹移到指定位置使用的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值