首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当浏览器为IE6、7或9且主机基于MAC-OSx时,move_upload_file无法移动文件。

当浏览器为IE6、7或9且主机基于MAC-OSx时,move_upload_file无法移动文件。
EN

Stack Overflow用户
提问于 2014-01-28 18:16:03
回答 2查看 103关注 0票数 0

我遇到了麻烦,因为一个我从未预料到的问题,所以请帮助我。(我对Stackoverflow非常陌生,所以如果我做错了什么,请容忍我)我正在开发一个非常简单的2文件应用程序,它要求用户在索引页面中选择一个文件,然后在表单提交中上传文件。当我试图上传一个文件名中有特殊字符的文件时,会出现问题。move_upload_file无法移动文件!

我在支持PHP5.2的MAC OSx服务器上托管了这些文件。如果我正在使用任何其他浏览器,然后是Internet 7、8或9(还没有在IE6上尝试),文件就会被完美地上传。

所以这个bug (move_upload_file无法移动文件)与组合有关: MAC OSx + IE 7,8,9 +文件名中的特殊字符。

为了进行测试,我在Linux服务器上上传了文件,然后一切都正常运行,甚至在IE7、8和9中也是如此:(

我甚至没有编写过一行javascript代码,所以这不是JS兼容性问题。

任何一个人都能说明一下这个组合到底有什么问题吗?

以下是表单(index.html):

代码语言:javascript
复制
<html>
<body>
<form method="post" action="uploadfile.php" enctype="multipart/form-data">
    <input type="file" name="uploadedfile" />
    <input type="submit" name="sbmt" value="Save" />
</form>
</body>
</html>

以下是来自fileupload.php的代码:

代码语言:javascript
复制
$target_path = "/Volumes/Data/........" . basename( $_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "file has been uploaded";
} else{
    echo "failed to upload file";
}

为了解决这个问题,我花了一整天的时间,如果有人能帮我解释一下为什么会这样,我会非常感激的。

提前谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-29 11:27:18

我终于找到了原因..。)这是因为IE8和IE9正以一种奇怪的方式将文件名中的特殊字符转换成一些替代方法。类似于字符正在被转换为“”(2个字符)

当PHP试图上传文件名时,MAC OSx不允许这样做。因此,move_upload_file未能将文件从tmp目录移到它应该到达的目录。

为了解决这个问题,我去掉了不必要的特殊字符,但最终得到了一个令人满意的解释:)

谢谢大家抽出时间。

票数 0
EN

Stack Overflow用户

发布于 2014-01-28 18:26:54

欢迎来到斯塔克溢流,多莉。

我假设您正在使用的webapge是UTF-8字符集,但是这些字符位于一个不同的字符集中,比如ISO-8859-1。您可以使用htmlentities函数将字符转换为HTML。This page may also help.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21413566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档