使用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. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--E-回旋星空

    链接:https://www.nowcoder.com/acm/contest/90/E 来源:牛客网 1.题目描述 曾经有两个来自吉尔尼斯的人(A和C)恋爱了,他们晚上经常在一起看头上的那片名为假的 ...

  2. 简单使用PuTTy登录centos虚拟机

    博主刚刚开始学习Linux,想通过写博客的方式加深对linux学习的记忆 使用虚拟机安装精简版的linux后发现窗口字体太小,于是就想着通过PuTTy登录的方式解决 简单安装linux后 将linux ...

  3. CentOS查看占用端口并关闭

    1.查看占用的端口号 netstat -lnp|grep 80  #80 是你需要查看的端口号 二.查看进程的详细信息 ps 29280  #查看进行信息,是否是自己要找的进程 三.杀掉进程 kill ...

  4. 【c学习-9】

    /*内存练习*/ #include #include//引入内存分配库文件 int main(){ double* x; //定义整型指针和double指针 int* y; x=(double*)ma ...

  5. (四)启用HTTPS

    安全规范中有一条是要求尽量使用https而弃用http(新Chrome将标记非HTTPS网站为不安全),其实启用https和之前的ipv6改造一样,并不是什么高难度或者工作流繁多的的改造,只需将中间件 ...

  6. laravel自定义返回错误方法

    返回视图传递错误信息 function withInfoErr($msg){ return back()->with('error',$msg); } 返回视图提示消息 function wit ...

  7. TP3.2.3 接入阿里sms 短信接口

    阿里云短信接口 配置文件 config.php //阿里大鱼 'Ali_SMS' =>array( 'sms_temp' =>'短信模板', 'sms_sign' =>'签名', ' ...

  8. (数据科学学习手札21)sklearn.datasets常用功能详解

    作为Python中经典的机器学习模块,sklearn围绕着机器学习提供了很多可直接调用的机器学习算法以及很多经典的数据集,本文就对sklearn中专门用来得到已有或自定义数据集的datasets模块进 ...

  9. CONCATENATE命令(文字列の結合)

    CONCATENATE命令とは文字列の結合を行う命令である.文字列を扱うChar, Numeric, Dats, Time, Stringの変数で使用する事が可能だ.単純に文字列の結合のみを行う方法. ...

  10. MyEclipse - 问题集 - 创建Maven项目,JDK版本默认是1.5

    修改Maven的配置文件settings.xml,增加profile节点,如下所示: <profile> <id>jdk-1.8</id> <activati ...