使用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 文件上传失败的更多相关文章

  1. vs文件上传失败--超过最大字符限制

    一.问题 在文件上传时,会遇到大文件上传失败. >F12查看报错网络请求返回结果 >问题分析 由于vs上传文件默认的字符大小控制. 二.解决方法 >在web.config中修改或添加 ...

  2. php大文件上传失败的原因及解决方法

    为什么上传大文件总是失败,上传小文件就没有问题.关于PHP大文件上传失败的原因及解决方法如下: 第1种情况:文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录.如果未指定 ...

  3. 影响 POST 请求文件上传失败的几个环节的配置(php + nginx)

    写在前面 最近写一个 php 接口,接受上传的文件,发现文件只要超过 5m 以上就会无响应失败,最后发现是 shadowsocks 的 timeout 设置问题(我全程开了全局的 VPN),但一开始并 ...

  4. php 分页实现 和 php 大文件上传失败的处理方式

    1. php分页: 要想做php的分页,首先要弄清楚要什么样的分页,关系到哪些参数,参数之间怎么关联: 目标分页效果如下: 分析: 1.主要涉及两个参数:一个是当前输出页面的页码,用变量$p 表示,另 ...

  5. php大文件上传失败的解决方法

    1.打开php.ini 2.查找post_max_size:(修改上传大小限制) 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的默认为8m,设置为自己需要的值, ...

  6. Laravel 文件上传失败的问题 error 7

    一个站点上传文件失败 error为7  UPLOAD_ERR_CANT_WRITE 临时文件上传不上  $_FILE打出来 Array(    [file] => Array        (  ...

  7. android开发里跳过的坑——图片文件上传失败

    使用的apache的httpclient的jar包,做的http图片上传,上传时,服务器总返文件格式不对.后来发现,是由于在创建FileBody时,使用了默认的ContentType引起的.所以服务器 ...

  8. wsl 2 unbuntu 部署 asp.net core 使用 nginx 做反向代理,调试文件上传失败

    继上一篇 asp.net core 3.1多种身份验证方案,cookie和jwt混合认证授权 的公司内部项目上线后发现文件上传功能有问题. 上传的文件超过50M以后前端就报错了,没有状态返回,也没有响 ...

  9. 文件上传失败 -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 ...

随机推荐

  1. Win10 VirtualBox虚拟机搭建lnmp环境

    之前用的是vagrant+VirtualBox搭建的环境,因为是windows系统动不动就报错,打不开环境,所以还是老老实实换了虚拟机哎.... 版本: VirtualBox 5.1.34   xsh ...

  2. linux下mysql主从复制,实现数据库同步

    运行环境: 查看linux版本命令:lsb_release -a 主服务器:centos release 6.5 mysql 5.6.10-log  IP:172.17.200.25从服务器:cent ...

  3. SQL中EXCEPT函数在 Mysql 和 sqlServer 中的替代方法

    示例摘自:极客代码:http://wiki.jikexueyuan.com/project/sql/useful-functions/except-clause.html EXCEPT 子句 EXCE ...

  4. Linux之redis主从复制

    redis集群中的数据库复制就是通过主从同步实现的 主节点Master把数据分发给节点Salve 主从同步的好处在高可用, redis节点有冗余设计 redis主从同步的原理 1. 从服务器向主服务器 ...

  5. visual studio 2015密钥

    Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2 ...

  6. [转]Nginx伪静态配置和常用Rewrite伪静态规则集锦

    Nginx伪静态配置和常用Rewrite伪静态规则集锦 作者: 字体:[增加 减小] 类型:转载 时间:2014-06-10 我要评论 伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把ph ...

  7. 微信小程序关于tabbar点击切换数据不刷新问题

    微信小程序中经常遇到的需求就是我提交了一个表单或者进行了一个操作,需要在我的个人中心页面中实时显示出来,但是小程序中的tabbar切换类似于tab切换 并不会进行页面刷新请求 所以总是会造成一些数据更 ...

  8. STL 一些常用的STL函数(持续更新

    先说一下  一边要用到算法的东西一般要加#include<algorithm>头文件 一.栈和队列 1 栈 :一种线性表 特点  后进先出 头文件  #include<stack&g ...

  9. SQL On Streaming

    此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 实时计算的一个方向 实时计算未来会成为一个趋势,基本上所有的离线计算任务都能通过实时计算来完成,对于实时计算来 ...

  10. centos redis 安装 php-redis扩展安装 及使用

    前提:centos7.php7 安装redis-server 1:yum install redis 编译安装php-redis 扩展 1:下载编译安装 wget https://codeload.g ...