使用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. 【PTA 天梯赛】L2-026. 小字辈(广搜+邻接表)

    本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号.随后第二行 ...

  2. 搭建简单的hadoop集群(译文)

    本文翻译翻译自http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/ClusterSetup.html 具体的实 ...

  3. fullPage.js全屏滚动插件API

    API sectionsColor:['green','orange','red','lime']; //设置背景颜色 可以为每一个section设置background-color属性 contro ...

  4. 003---生成器 & 迭代器

    生成器 & 迭代器 列表生成式 现在有个需求,列表[1, 2, 3, 4, 5, 6, 7, 8, 9],将列表里的每个值加1. 二逼青年版 a = [1, 2, 3, 4, 5, 6, 7, ...

  5. 『Python Kivy』官方乒乓球游戏示例解析

    本篇文章用于对Kivy框架官方所给出的一个「乒乓球」小游戏的源码进行简单地解析.我会尽可能的将方方面面的内容都说清楚.在文章的最下方为官方所给出的这个小游戏的教程以及游戏源码. 由于篇幅所限,本文只简 ...

  6. 使用Cydia Substrate Hook Android Java世界

    从来没接触过Android的HOOK,在看雪上找到了一篇HOOK 的文章,但是太复杂了,应该是本地环境问题,测试不成功. 后来搜到Cydia Substrate,看了几篇文章,进入官网查看了一下文档, ...

  7. 使用pyinstaller将Python打包为exe文件

    当我们完成一个Python项目或一个程序时,希望将Python的py文件打包成在Windows系统下直接可以运行的exe程序,那么pyInstaller就是一个很好的选择.pyInstaller可以将 ...

  8. Qt 报错LINK2019:无法解析的外部符号

    这里用的都是Qt 自己的东西,但是还是抱错,所以怀疑是没有包含进去,尝试了清理项目,重新编译等,还是不行 用到一个最好的办法,就是把构建的文件夹整个删除,在重新编译就可以了 如图所示,把debug和r ...

  9. Django2.1.3框架中(fields.E300)和(fields.E307)报错处理

    使用Django框架创建了Web项目,修改了模型models.py之后,执行数据库迁移操作,出现如下报错: models.py内容如下: from django.db import models fr ...

  10. Struts2(三.用户登录状态显示及Struts2标签)

    1.编写main.jsp /WebContent/main.jsp 之前用户登录时已把用户存入session <%@ page language="java" content ...