PHP上传图片HTTPS

时间:2013-01-26 09:30:35

标签: php apache https upload

我有一张表格可以正常发送图像,复制图像并调整大小。

我使用GeoTrust证书在SSL中切换了网站。除文件上传外,一切正常。

表格是这样的:

<form name='sendAvatar' method='post' action='if_avatar_resize.php' enctype='multipart/form-data' target="If_avatar_resize">

所以我将文件上传到iframe中,该iframe包含以下代码:

if (!copy($_FILES['file_image']["tmp_name"], $dest_file)) {
  echo $_FILES['file_image']["tmp_name"]."The copy of the file failed..\n".$dest_file ;
} else {
  echo $_FILES['file_image']["tmp_name"]."Copy of the file OK " ;
}

上传的文件完全相同,当网站使用HTTPS时,我始终会收到错误消息“文件副本失败”

所以我检查了目录/ tmp以查看文件是否已上传:

没有SSL:

-sh-3.2$ ll phpW7XSL6
-rw------- 1 apache apache 2279079 Jan 26 00:52 phpW7XSL6
-sh-3.2$ ll phpW7XSL6
ls: phpW7XSL6: No such file or directory

使用SSL:

-sh-3.2$ ll phpbcUxyG
-rw------- 1 apache apache 2160218 Jan 26 00:53 phpbcUxyG
-sh-3.2$ ll phpbcUxyG
ls: phpbcUxyG: No such file or directory

因此,无论表单是否为HTTPS,文件的上传工作正常,文件上传到/ tmp

另一方面,如果文件是以HTTPS上传的,则该文件的副本不起作用。

有谁知道为什么?

3 个答案:

答案 0 :(得分:0)

代码中只有很少的变化

if (!move_uploaded_file($_FILES['file_image']["tmp_name"], $dest_file)) {
  echo $_FILES['file_image']["tmp_name"]."Upload file failed..\n".$dest_file ;
} else {
  echo $_FILES['file_image']["tmp_name"]."Upload file Successfully..\n" ;
}

愿这对你有帮助.............:)

答案 1 :(得分:0)

是的,我们无法将$ _FILES http网站发送到https网站。换句话说,move_uploaded_files()函数仅用于移动文件,如http://abc.comhttp://xyz.com而不是https:site

答案 2 :(得分:0)

我注意到了类似的问题。

在纯HTTP和HTTPS上测试我的上传后:似乎在SSL模式下,超过PHP的upload_max_filesizepost_max_size完全失败,而$ _FILES [...] [“tmp_name” ]没有填充。

由于这是一个新安装的服务器,默认设置为@ 2M,我的上传测试已超出。

我仍然在寻找一些文档来支持这一点,以及一种优雅的方法来检测更强大的错误。