php 文件上传失败

使用OSX系统,在使用MAMP Pro作为虚拟服务器,并使用PHP作为后端语言进行文件上传,从临时文件夹拷贝文件的方法为

move_uploaded_file

代码如下:

 1 if($_FILES[‘file‘][‘error‘]>0){
 2     echo ‘file error‘;
 3 }else{
 4     echo ‘upload:‘.$_FILES[‘file‘][‘name‘].‘<br>‘;
 5     echo ‘type:‘.$_FILES[‘file‘][‘type‘].‘<br>‘;
 6     echo ‘size:‘.$_FILES[‘file‘][‘size‘].‘<br>‘;
 7     echo ‘stored in:‘.$_FILES[‘file‘][‘tmp_name‘].‘<br>‘;
 8     if (file_exists("upload/" . $_FILES[‘file‘]["name"]))
 9           {
10           echo $_FILES[‘file‘]["name"] . " already exists. ";
11           }
12         else
13           {
14           move_uploaded_file($_FILES[‘file‘]["tmp_name"],
15           "upload/" . $_FILES[‘file‘]["name"]);
16           echo "Stored in: " . "/Applications/MAMP/htdocs/learnPhp/upload/" . $_FILES[‘file‘]["name"];
17           }
18 }

运行报错:

[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:

进入文件父目录:

$ 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了,不过,之后要是用户常规操作修改文件夹的时候系统就提示需要输入管理员密码了。

时间: 2024-10-08 10:03:54

php 文件上传失败的相关文章

spring boot工程文件上传出现net::ERR_CONNECTION_ABORTED,文件上传失败

SpringBoot做文件上传时出现了The field file exceeds its maximum permitted size of 1048576 bytes.错误,显示文件的大小超出了允许的范围.查看了官方文档,原来Spring Boot工程嵌入的tomcat限制了请求的文件大小,这一点在Spring Boot的官方文档中有说明,原文如下 65.5 Handling Multipart File UploadsSpring Boot embraces the Servlet 3 j

EXT FileUploadField 文件上传失败

EXT 上传上文件成功,一旦上传稍大文件(10M)就失败. FileUploadField1.PostedFile.SaveAs(FullPath); 解决方法: 设置web.config <configuration> <system.web> <httpRuntime maxRequestLength="1048576" executionTimeout="720" /> </system.web> </co

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

使用的apache的httpclient的jar包,做的http图片上传,上传时,服务器总返文件格式不对.后来发现,是由于在创建FileBody时,使用了默认的ContentType引起的.所以服务器有判断文件类型的要求的时候,创建FlieBody时需要注意添加MIME类型,例如PNG图片文件: new FileBody(entity.getValue(), ContentType.create("IMAGE/PNG")));

php简单文件上传类

<?php header("Content-Type:text/html; charset=utf-8"); if($_POST['submit']){ $upfiles = new Upload(); $upfiles->upload_file(); } class Upload{ /*作者:mckee 来自:www.phpddt.com*/ public $upload_name; //上传文件名 public $upload_tmp_name; //上传临时文件名 p

Struts2单文件上传原理及示例

一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式. 2.multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里. 3.text/plain:这种方式主要适用于直接通过表单发送邮件的

文件上传下载—servlet API实现

servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servl

jQuery插件之路(三)——文件上传(支持拖拽上传)

好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下,上传文件的时候需要利用的一些必要的知识. 首先我们要说的就是FileReader对象,这是一个HTML5提出的,专门用来异步的读取用户计算机上文件的对象,这里有详细的介绍.所以如果我们想要使用它,那么首先我们得先创建一个FileReader对象. var fr = new FileReader()

JavaWeb学习总结(五十)——文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

深入分析JavaWeb Item40 -- 文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru