解决PHP move_uploaded_file函数移动图片失败
出现的问题描述:
今天在实现一个在用户注册时上传头像图片文件的PHP脚本时,出现了问题:PHP脚本在前面已经确定
浏览器端上传文件没有错误。
上传的文件是合法的。
上传的文件是图像文件。
已经在服务器端生成了唯一的文件名。
代码
接下来我们应该做的就是把文件从临时位置移动到固定位置,于是乎我就写了以下脚本:
//把文件从临时位置移动到固定位置@move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename) or handle_error("存储图片文件出错", "移动文件出错" . "{$upload_filename}");
代码handle_error()函数是我自己定义的错误处理函数,当move_uploaded_file函数执行出错时,就会跳转到错误页,当我执行执行上面的脚本时,脚本跳转到了错误页,很明显是出错了,首先我排查了一下我的函数参数是否出现了错误:
$_FILES[$image_fieldname]['tmp_name']$upload_filename //是我自己组合的文件路径,保证没错
根据PHP 手册,我传入函数的上述两个参数都是能保证没有问题的,这么怎么回事呢,页面中都没有报错(在函数的前面我使用了PHP的“@”运算符,所以页面才不会报错)
@运算符
注:在代码中要慎用PHP的 @ 运算符,
@运算符可以屏蔽掉所有可能来自用户输入无效的问题或者SQL查询包含了一个不正确的列、甚至是一个不规范URL 错误都可以避免了,代码甚至可以不检查由用户、自己或带那产生的错误,简而言之,@运算符可以屏蔽掉代码的错误信息,一个流行网站经常使用@,因为它们根本不能崩溃或者停止,但是在这种情形下要使用其他解决错误的方案。
寻找error log文件
当时我并没有意识到@运算符对出错信息的屏蔽,我就想去找apache的error log 错误日志文件看看,由于我在搭建PHP开发环境的时候使用的是xampp这样的开发套件,所以error_log文件跟网上大部分文章说的不一样,最终我在
(我的主机是 ubuntu)
/opt/lampp/logs
路径下找到了php_error_log文件,当然这个路径下还存放着apache的error_log文件,在php_error_log文件中我看到了出错问题:权限不够,我终于找到了出错的地方:我们存放图片的目的目录对执行PHP的用户来说是没有权限的,执行PHP脚本的用户和我写脚本代码、创建图片文件夹的用户不是同一个用户
其实我们本不用这么麻烦,我们只要将函数前面的@运算符去掉,然后去掉错误处理函数handle_error()函数,然后我们 就可以在web页面看到出错信息了。
修改目标文件夹权限
不管怎么样,我们还是找到了问题的根源,这是一件很值得高兴的事情,既然文件夹所属用户和权限不对,那么我们只要修改这些问题即可:
修改图片固定存放文件夹的所属用户,将其修改为运行apache执行PHP脚本的用户。
将文件夹的权限改为755
那么运行apache的用户是谁呢,我们利用PHP脚本获取:
echo exec('whoami'); //获得执行该文件的用户名,从而修改图片文件夹的权限
这样我得到了执行脚本的用户为:daemon,你们得到的很可能跟我的不一样。
下面我们来修改文件夹的所属用户:
chown daemon -R ~/web/hello_php/uploads
~/web/hello_php/uploads是我存放图片的目标路径,-R代表递归的给这个目录下的文件夹修改所属用户。
接着修改文件夹权限
chmod 775 -R ~/web/hello_php/uploads
这样我们就大功告成了,
参考阅读:http://www.manongjc.com/article/1494.html
解决PHP move_uploaded_file函数移动图片失败的更多相关文章
- 在内存充足时malloc函数分配内存失败的原因及解决
昨天在修改自己的代码的时候,碰到了malloc函数内存分配失败,上网翻了翻,一个很可能的原因是之前的代码出现了越界操作,导致malloc分配函数所涉及的一些信息被破坏.在这个思想的指导下,今天又是郁闷 ...
- opencv通过dll调用matlab函数,图片作为参数
[blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数 前文介绍了如何“csharp通过dll调用opencv函数,图片作为参数”.而在实 ...
- springmvc异步上传图片并回调页面函数插入图片url代码示例
<tr> <td class="search_td">属性值图片值:</td> <td> <input type=" ...
- Android开发 ---从互联网上下载文件,回调函数,图片压缩、倒转
Android开发 ---从互联网上下载文件,回调函数,图片压缩.倒转 效果图: 描述: 当点击“下载网络图像”按钮时,系统会将图二中的照片在互联网上找到,并显示在图像框中 注意:这个例子并没有将图 ...
- 使用Python PIL库中的Image.thumbnail函数裁剪图片
今天,是我来到博客园的第五天,发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢 ...
- PHP move_uploaded_file() 函数
定义和用法 move_uploaded_file() 函数把上传的文件移动到新位置. 如果成功该函数返回 TRUE,如果失败则返回 FALSE. 语法 move_uploaded_file(file, ...
- nginx实现动态分离,解决css和js等图片加载问题
改帖专门为使用nginx,通过nginx把请求转发到web服务器再返回客户端的时候,解决css和js和图片加载不出来的问题. 如果没安装nginx,请访问一下地址进行安装 http://www.cnb ...
- csharp通过dll调用opencv函数,图片作为参数
[blog 项目实战派]csharp通过dll调用opencv函数,图片作为参数 一直想做着方面的研究,但是因为这个方面的知识过于小众,也是由于自己找资料的能力比较弱,知道今天才找 ...
- 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移
解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...
随机推荐
- [问题]数据库MySQL和Navicat的乱码问题
计算机中存储字符需要使用编码集,早期有ASCII集,但是随着技术的发展,ASCII集不能满足需求,出现了越来越多的字符,比如中文字符等.后来又发展出了Unicode.GB2312.utf8等字符集.字 ...
- IIS上虚拟目录下站点的web.config与根站点的web.config冲突解决方法
IIS7.5上在站点下部署虚拟目录,访问虚拟目录下的项目提示与父节点配置冲突.,节点与的<system.web>节点与主站点的<system.web>冲突解决方法: 在站点下的 ...
- redis 数据类型
上一篇文章主要写了redis在linux下的安装,这里讲一下redis基本的数据类型,linux的数据类型比较丰富,主要有五种数据类型 .String 字符串类型 常用命令: 除了get.set.in ...
- Netty 的 inbound 与 outbound, 以及 InboundHandler 的 channelInactive 与 OutboundHandler 的 close
先看一个例子. 有一个简单 Server public class SimpleServer { public static void main(String[] args) throws Excep ...
- 通过js获得html标签的值
js获取html元素的值并赋值 1).input文本框 <input type="text" value="时间" placeholder="姓 ...
- 深入理解Java虚拟机(一)、Java内存区域与内存溢出异常
Java虚拟机所管理的内存包括以下几个运行时数据区: 程序计数器(PCR): 1.是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器 2.为线程私有 3.执行Java方法有PCR,执行 ...
- Quarter square 查找表乘法器,手动建立rom
建立一个C的范围为0~255,内容是(C)2/4的查表 占用256个存储空间,但可以计算出+-127的两个数之积.传统算法需要至少127×127个存储空间. 查找表模块的建立: module lut_ ...
- easy ui 零散技巧
1.Jquery带上下文查找: 格式:$(selector,context) 例如:$("input",window.document),查找当前文档下的说有input元素,也等价 ...
- AngularJS的小知识点
小知识点:$scope和$rootScope (1)每次使用ngController指令,都会调用控制器的创建函数,创建出一个控制器对象. (2)每次创建一个控制器对象,AngularJS都会创建一个 ...
- css 3 动画
1.transition,其作用是:平滑的改变CSS的值.无论是点击事件,焦点事件,还是鼠标hover,只要值改变了,就是平滑的,就是动画. transition 属性介绍: transition-p ...