php 文件上传失败
使用OSX系统,在使用MAMP Pro作为虚拟服务器,并使用PHP作为后端语言进行文件上传,从临时文件夹拷贝文件的方法为
move_uploaded_file
代码如下:
if($_FILES['file']['error']>0){
echo 'file error';
}else{
echo 'upload:'.$_FILES['file']['name'].'<br>';
echo 'type:'.$_FILES['file']['type'].'<br>';
echo 'size:'.$_FILES['file']['size'].'<br>';
echo 'stored in:'.$_FILES['file']['tmp_name'].'<br>';
if (file_exists("upload/" . $_FILES['file']["name"]))
{
echo $_FILES['file']["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES['file']["tmp_name"],
"upload/" . $_FILES['file']["name"]);
echo "Stored in: " . "/Applications/MAMP/htdocs/learnPhp/upload/" . $_FILES['file']["name"];
}
}
运行报错:
[23-Mar-2016 22:01:39] PHP Warning: move_uploaded_file(upload/visualize_pnas.py) [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: failed to open stream: Permission denied in /Applications/MAMP/htdocs/learnPhp/upload.php on line 18
[23-Mar-2016 22:01:39] PHP Warning: move_uploaded_file() [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: Unable to move '/Applications/MAMP/tmp/php/phpBeg1Al' to 'upload/visualize_pnas.py' in /Applications/MAMP/htdocs/learnPhp/upload.php on line 18
主要报错为
failed to open stream: Permission denied
意思是,Php没有文件夹写权限,因为只有owner才有写权限。我们需要把这个文件夹的owner改为httpd的owner:
$ ps aux | grep httpd
结果为:
_www 68160 0.0 0.0 2487444 100 ?? S 10:10下午 0:00.00 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 68159 0.0 0.0 2487444 108 ?? S 10:10下午 0:00.01 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 68154 0.0 0.0 2487444 108 ?? S 10:10下午 0:00.03 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 66607 0.0 0.0 2487444 108 ?? S 8:34下午 0:00.09 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 66301 0.0 0.0 2487444 108 ?? S 8:15下午 0:00.06 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 66294 0.0 0.0 2487444 108 ?? S 8:15下午 0:00.04 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 66293 0.0 0.0 2487444 108 ?? S 8:15下午 0:00.06 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 66292 0.0 0.0 2487444 108 ?? S 8:15下午 0:09.47 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 66291 0.0 0.0 2487444 108 ?? S 8:15下午 0:07.27 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 66290 0.0 0.0 2487444 108 ?? S 8:15下午 0:00.08 /Applications/MAMP/Library/bin/httpd -f /Library/Application Support/appsolute/MAMP PRO/conf/httpd.conf -k start
_www 66097 0.0 0.0 2472172 76 ?? S 8:15下午 0:00.00 /Applications/MAMP/Library/bin/
第一列为_www,所以,httpd的owner是_www。
接下来修改文件夹的owner:
$ sudo chown _www /Applications/MAMP/htdocs/learnPhp/upload/
如果想让文件夹下面的所有文件都修改owner,则需要在上面的命令中增加-R:
$ sudo chown -R _www /Applications/MAMP/htdocs/learnPhp/upload/
这样就可以啦!我们现在验证一下:
看看这个文件夹的owner:
进入文件父目录:
$ cd /Applications/MAMP/htdocs/learnPhp/
查看子目录的owner:
$ ls -l
结果为:
drwxr-xr-x 3 Yellow admin 102 3 23 20:27 files
-rw-r--r-- 1 Yellow admin 277 3 23 19:42 index.html
drwxr-xr-x 4 _www admin 136 3 23 23:07 upload
-rw-r--r-- 1 Yellow admin 792 3 24 10:50 upload.php
-rw-r--r-- 1 Yellow admin 275 3 23 21:10 welcome.php
我们可以看到upload文件夹的owner已经是_www了,不过,之后要是用户常规操作修改文件夹的时候系统就提示需要输入管理员密码了。
如果此时问题还没有解决,那就检查这个文件夹的owner是否有写权限,那要看第2-4个字符中有没有w。如果没有的话,在shell中执行以下命令:
$ sudo chmod -R 0755 /Applications/MAMP/htdocs/learnPhp/upload/
常见的权限代号如下:
-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限
php 文件上传失败的更多相关文章
- vs文件上传失败--超过最大字符限制
一.问题 在文件上传时,会遇到大文件上传失败. >F12查看报错网络请求返回结果 >问题分析 由于vs上传文件默认的字符大小控制. 二.解决方法 >在web.config中修改或添加 ...
- php大文件上传失败的原因及解决方法
为什么上传大文件总是失败,上传小文件就没有问题.关于PHP大文件上传失败的原因及解决方法如下: 第1种情况:文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录.如果未指定 ...
- 影响 POST 请求文件上传失败的几个环节的配置(php + nginx)
写在前面 最近写一个 php 接口,接受上传的文件,发现文件只要超过 5m 以上就会无响应失败,最后发现是 shadowsocks 的 timeout 设置问题(我全程开了全局的 VPN),但一开始并 ...
- php 分页实现 和 php 大文件上传失败的处理方式
1. php分页: 要想做php的分页,首先要弄清楚要什么样的分页,关系到哪些参数,参数之间怎么关联: 目标分页效果如下: 分析: 1.主要涉及两个参数:一个是当前输出页面的页码,用变量$p 表示,另 ...
- php大文件上传失败的解决方法
1.打开php.ini 2.查找post_max_size:(修改上传大小限制) 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的默认为8m,设置为自己需要的值, ...
- Laravel 文件上传失败的问题 error 7
一个站点上传文件失败 error为7 UPLOAD_ERR_CANT_WRITE 临时文件上传不上 $_FILE打出来 Array( [file] => Array ( ...
- android开发里跳过的坑——图片文件上传失败
使用的apache的httpclient的jar包,做的http图片上传,上传时,服务器总返文件格式不对.后来发现,是由于在创建FileBody时,使用了默认的ContentType引起的.所以服务器 ...
- wsl 2 unbuntu 部署 asp.net core 使用 nginx 做反向代理,调试文件上传失败
继上一篇 asp.net core 3.1多种身份验证方案,cookie和jwt混合认证授权 的公司内部项目上线后发现文件上传功能有问题. 上传的文件超过50M以后前端就报错了,没有状态返回,也没有响 ...
- 文件上传失败 -nginx报错 client intended to send too large body: 1331696 bytes
location / { root /data/fastdfs/data; include gzip.conf; ngx_fastdfs_module; client_max_body_size 10 ...
随机推荐
- Percona-Tookit工具包之pt-online-schema-change
Preface As we all know,it's really a troublesome thing to DBA in scenario of changing table ...
- ubuntu系统快速搭建开发环境
1.免密登陆 1.1 原理 ssh协议中用到了对称加密和非对称加密,如果不了解可以百度一下,原理引用一下这篇博客 在ssh中,非对称加密被用来在会话初始化阶段为通信双方进行会话密钥的协商.由于非对称加 ...
- 2017年PHP程序员未来路在何方?(转载)
PHP 从诞生到现在已经有 20 多年历史,从 Web 时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些 ...
- ARM串口控制终端命令
配置开发板eth0网络: # ifconfig eth0 10.70.12.168
- python2.7练习小例子(八)
8):题目:输出 9*9 乘法口诀表. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列. 程序源代码: #!/usr/bin/python # -*- coding: ...
- A problem occurred evaluating project ':'. > ASCII
项目编译出错: 错误信息如下: FAILURE: Build failed with an exception. * Where: Build file 'F:\git\i***\build.grad ...
- PIC24 通过USB在线升级 -- USB CDC bootloader
了解bootloader的实现,请加QQ: 1273623966 (验证填bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek 今 ...
- django 解决cors问题
首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat 登录注册 AFei0018-博客 穷则思变,差则思勤.Pyth ...
- Sumsets 递推
Sumsets Time Limit : 6000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submi ...
- Viewer.js 图片预览插件使用
一.简介 Viewer.js 是一款强大的图片查看器. Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片 ...