php对uploads文件的处理问题的解决
解决uploads问题的要点有几点:
参考这篇文章
第一,
在php.ini文件中, 有file_uploads这一节
file_uploads = On ;是否开启文件上传功能, 该功能有很大的安全问题, 需要进行身份权限验证然后才允许上传
upload_tmp_dir = 'c:/wamp/tmp' ;如果没有设置, 就使用系统默认的临时目录
upload_max_filesize = 2M
**注意upload(s)的写法.
第二,
还要注意 post 本身 允许传送表单的最大数据: post_max_size = 8M 默认的是8M, 如果上面的upload_max_filesize=10M ,
这里也只会传送8M的最大文件, 通常要设置成: post_max_size 大于> upload_max_filesize.
第三,
还要注意脚本执行的时间限制, 因为上传文件 的时间对大文件, 可能需要的时间是比较长的, 所以, 要设置
max_execution_time = 0, 默认的是 30second
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 256M ; Maximum amount of memory a script may consume (8MB)
第四,
max_input_time 以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。
如果应用程序所运行环境处在低速链路上,则需要增加此值以适应接收数据所需的更多时间
memory_limit
所以, 综上所述, 就是对上传文件, 一般有类型和文件大小的限制, 这也理解文件上传的大小一般不超过2M .
在表单数据回传到服务器上时, 浏览器要对表单中的数据进行编码, enctype=EncodeType属性就表示编码类型
一般不需要写, 就采用默认属性了,
但是在上传文件或pdf等时, 就一定要设置这个form属性了,
共有三个值:
application/x-www-form-urlencoded: 表示将+编码为空格, 特殊字符用ascii的十六进制编码. 这个就是form的默认编码
multipart/form-data: 用于上传文件,图片等二进制内容时
text/plain: 用于上传纯文本内容, 而不是将form的input等控件的内容作为html内容上传
关于$_FILES 全局变量
在form表单中,可以同时包含多个文件域, 每个name都将作为区分上传文件的下标
$_FILES, 注意是files,复数, 所以, 它是所有的全局系统变量中, 如$_GET, $_POST, COOKIE ,SESSION等, 唯一的一个二维数组!
每个下标, 表示一个上传的文件的信息.
$_FILES['file1']包含5个元素:
error: 等于0 ,表示上传成功, 1,2.3,4,5都表示错误:
name: 原来的名字,
type: 原来文件的mime类型
size: 文件大小, 以byte为单位
tmp_name:临时文件名.
mime:multipurpose internet mail extension: 多功能,多用途网络/网际邮件扩展协议, 用在浏览器上表示多媒体的"打开"类型..,图片的mime类型: image/gif, image/png, image/jpeg/pjpeg(ie)
tmp_name是上传文件的临时文件, php随机生成的, 因为文件上传后, 为了安全! 并不允许直接放在 网站的目录中, 必须对文件进行安全检查等 操作后, 才允许 copy 使用(move_uploaded_file函数)到 站点的目录中去.
move_upload_file()总是失败?
是因为apache中的权限问题
而upload_tmp_dir中的文件, 总是在脚本执行完毕后, 就把这些上传的临时文件给删除了的.所以你是看不到的.
因为apache本身做了权限设置, 只允许php程序浏览 网站跟目录, 不允许浏览服务器硬盘目录.
配置选项:(这个是在linux中)
php_admin_value open_basedir localhost/wish/
php_admin_value upload_tmp_dir localhost/wish/tmp
php的echo可以输出script脚本, 如:
$old_file = "";
$old_file = "/folder/file.WAV";//这里是需要替换的文件,不在apache的目录下,是全局目录,绝对路径,folder是755权限,file的权限是644
$file = $_FILES['file']['tmp_name'];
if(is_uploaded_file($file)){
if(@move_uploaded_file($_FILES['file']['tmp_name'], $old_file)){
echo '<script>alert("替换成功");window.location="index.php";</script>';
}else{
echo '<script>alert("替换失败");window.location="index.php";</script>';
}
}else{
echo '<script>alert("上传失败");window.location="index.php";</script>';
}
在windows中, 要解 move_uploaded_file()失败的问题,
windows中, 权限应该不是问题,
问题是: move...函数的目标路径/文件名 参数, 中的目标路径, 应该是: 绝对路径!
绝对路径要用 __FILE__来获得, 而不是用 $_SERVER['SCRiPT_NAME']
函数是dirname, 不是basedir!
用$app_path = dirname (FILE). 就获得绝对路径 然后目标参数就用: $app_path. '/uploads'. $old_name.
$_SERVER['scRIT_NAME']得到的是 相对 网站的根路径: "/APP/..." 这个是相对路径, 要出错!!
move_uploaded_file($_FILES['upfile']['temp_name'], $app_path.'/uploads/'.$old_name)
第一个参数就是临时文件名, 不用再加临时路径, ...
the whole code is the following:
<title>无标题文档</title>
<style type="text/css">
.error {
font-size: 16px;
color: red;
background: #FC3;
border: 1px dotted #60F;
height: 50px;
width: 800px;
line-height: 50px;
text-align: center;
}
</style>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="upfile">
<br/>
<input type="submit" value="upload">
</form>
<pre>
<?php
$app_path = dirname(__FILE__);
$uf = $_FILES['upfile'];
if($uf['error'] == 0) {
$name = $uf['name'];
if(($uf['type'] != 'image/gif' && $uf['type'] != 'image/png' && $uf['type'] != 'image/jpeg' && $uf['type'] != 'image/pjpeg' ) || $uf['size'] > 2000000){
echo '<p class="error">Error: the type of file uploaded is not image or filesize is more than 2M'.'</p>';
exit;
}else{
echo "uploaded file's name is: ".$name.'<br/>';
echo 'the size of file uploaded is : '. (round($uf['size']/1024/1024,2)).'MB<br/>';
}
/* Note: In function 'iconv' below, the first parameter must be utf-8,
* and cann't be utf8!
*/
if(move_uploaded_file($uf['tmp_name'], $app_path.'\\myuploaded\\'.iconv('utf-8','gb2312//ignore',$name))){
echo 'uploading file is completed successfully'.'<br/>';
}else{
echo '<p class="error"> Warning: uploading file is failed</p>';
}
}else{
echo '"<p class="error">error: file uploading is failed: '.$uf['error'].'</p>';
}
?>
</pre>
</body>
php对uploads文件的处理问题的解决的更多相关文章
- vs2010/2013项目的C++所在文件夹越来越大如何解决?
vs2010/2013项目所在文件夹越来越大如何解决? Tools->Options->Text Editor->C/C++->Advanced,在 Fallback Loca ...
- XCode编译文件过多导致内存吃紧解决方法
XCode编译文件过多导致内存吃紧解决方法 /Users/~~/Library/Developer/Xcode/DerivedData 1) 然后 找到编译文件 删除 就好了哦 快去试试看吧
- Mysql文件太大导入失败解决办法总结
Mysql文件太大导入失败解决办法总结 在使用phpmyadmin导入数据库的时候可能会碰到由于数据库文件太大而无法导入的问题! 英文提示如下:File exceeds the maximum all ...
- 关于SSIS批量抽取Excel文件报0x80004005错误的解决办法
原文:关于SSIS批量抽取Excel文件报0x80004005错误的解决办法 标题: Microsoft Visual Studio ------------------------------ Pa ...
- win7 Host文件修改后无效的解决办法
win7 Host文件修改后无效的解决办法 正常情况下hosts文件随时修改随时生效,如果出现修改后不生效的情况,首先确定文件是ascii编码,以windows格式为换行符,然后依次采用如下方法 1 ...
- django在关闭debug后,admin界面 及静态文件无法加载的解决办法
当debug为true的时候,ALLOWED_HOSTS是跳过不管用的.所以这里需要将debug关掉,令debug=false,ALLOWED_HOSTS=[ '*' ]表示所有的主机都可以访问 开启 ...
- Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
使用Eclipse编辑jsp.js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲.将所有用过的方法罗列如下: 1.取消验证 windo ...
- Vim的行号、语法显示等设置(.vimrc文件的配置)以及乱码解决
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进 等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc.在启动vim时,当前用户 ...
- cat正常,cat重定向到文件可能是乱码;解决办法
文件cat正常,cat重定向到文件可能是乱码:解决办法如下 .vimrc文件中增加如下两行 set fileencoding=utf8 set fileencodings=utf8 据一位老神医说,文 ...
随机推荐
- 微信小程序一步步搭建商城系列-01-开篇
1.小程序介绍 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用.也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题.应用将无处不 ...
- 用WebBrowser采集渲染后的HTML页面
主要用于微信的文章采集,如果用单纯的HttpClient采集,会出现页面无法渲染的情况: 经过研究发觉公众文章html页面是经过渲染之后显示的,那么思路来了,如果在dotnet的环境下,用WebBro ...
- hdu 5237 二进制
很无聊的模拟题...mark几个有用的小程序: 字符->二进制ASCII码 string tobin(char c) { string t; ; i<; i++) { t=+)+t; c/ ...
- Scala特性: 隐式转换
1.隐式转换特征: 1)隐式参数的用法 · 获取可能的预期类型 · 获取预期类型,并且拥有预期类型的行为 · 对信息进行补充说明(一般用函数做隐式参数的比较多) 2)隐式类: 3)隐式method:
- 关于captive portal
portal是入口的意思,我的理解,在这里其实就是门户或者主页.captive portal,就是强制主页.校园网里面的验证通常都是通过一个网页验证来完成,不管你点要访问哪一个网站,它都会强制给你转到 ...
- php Unable to find the wrapper "https"
php -m | grep -i --color openssl php 没有openssl模块 cd /data/source/php-5.3.29/ext/openssl #php的解压包下面 y ...
- iOS 自定义对象转NSDictionary
我们在向后台Post数据的时候,常常需要把某个对象作为参数,比如在AF的框架中,我们进行Post时,其中的para参数就是需要NSdictionary的 Alamofire.request(.POST ...
- POJ3254Corn Fields(状态压缩DP入门)
题目链接 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻.问有多少种放牛方案(一 ...
- linux学习笔记-dump命令的使用
http://blog.chinaunix.net/uid-29797586-id-4458302.html
- oneM2M启动Release 3标准化,华为引领物联网技术布局
http://developer.huawei.com/cn/ict/news/cn/2016/06/onem2m [韩国,首尔,2016年6月] 国际权威的物联网组织oneM2M召开第23次技术全会 ...