视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ThinkPHP3.2本地文件上传没问题放到服务器上出错
2020-11-09 07:20:02 责编:小采
文档


正如标题所说,出现这个问题以后,我自然的就去找源码,一点点截断输出,最后把问题总结到“临时文件能找到,操作临时文件时就没反应了”,当时还没意识到这是服务器访问权限的问题,去网上找了找还是没结果。后来以为是apache环境配置和本地不一样,又卸了

正如标题所说,出现这个问题以后,我自然的就去找源码,一点点截断输出,最后把问题总结到“临时文件能找到,操作临时文件时就没反应了”,当时还没意识到这是服务器访问权限的问题,去网上找了找还是没结果。后来以为是apache环境配置和本地不一样,又卸了重装,和本地的配置文件一行一行的对比,最后还是老样子。

然后在CSDN的一篇博客《ThinkPhp上传服务器无法加载模块问题总结》里找到了突破口,里面有一句话“首先看thinkphp日志路径:..\Runtime\Logs\log文件”,我看了服务器上的log文件,发现了下面一段代码:

:open_basedir restriction in effect. File(/tmp) is not within the allowed path(s):

我才意识到问题出在tmp临时文件夹的访问权限上,然后把文件上传的tmp临时文件目录移到了另一个盘下,并设置整个盘对everyone都可读,结果还是不行。又上Google搜上面一段代码,才得到正确的结果,问题出在配置虚拟域名的http-vhosts.conf里,你如果搜“php_admin_value open_basedir”的话会得到很多答案,我在此copy并补充一下

解决方法:
将上传文件的临时目录加入到php_admin_value open_basedir后面,最后看起来是这样的:

linux
php_admin_value open_basedir “usr/local/apache/htdocs/www:/tmp”

windows

php_admin_value open_basedir “d:\wampserver\tmp;e:\tmp”

把PHP脚本操作在web目录可以避免程序员使用copy函数把系统文件拷贝到web目录。 move_uploaded_file不受open_basedir的,所以不必修改php.ini里upload_tmp_dir的值。

下载本文
显示全文
专题