php 使用$_FILES 能否获得上传文件的绝对地址
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 使用$_FILES 能否获得上传文件的绝对地址相关的知识,希望对你有一定的参考价值。
这个功能大概是:点击浏览后选择上传文件,然后能否得到文件的绝对地址。也就是浏览按钮左边显示的文件地址。 谢谢大神~~
不能的。
HTTP协议对所上传文件,在用户本地计算机中的路径不予上传,仅提供文件在本地计算机中的文件名。而php预定义变量$_FILES,是PHP解析文件上传的HTTP请求后自动创建的变量,所以无法获取到HTTP协议中不包含的信息。
如果要获取上传文件在服务器中的路径,可以使用以下代码获取:
$_FILES[field_name]["tmp_name"] 参考技术A PHP 常量 dirname(__file__)__FILE__ :被称为PHP魔术常量 ,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径
1)dirname(__FILE__) 函数返回的是脚本所在在的路径。 更新网络
比如文件 b.php教程 包含如下内容:
$basedir = dirname(__FILE__);
echo $basedir
//将在页面打印出一个这个文件所在绝对路径!
?>
我做的测试得到结果: E:websiteothertestcms
这个相当于, asp教程中的server.mappth的用法
如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。 变量$basedir 的内容还是b.php所在的那个文件夹的路径。 而不是变成a.php文件所在的目录。
2)dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。
不会返回当前的文件名称。 dirname(__FILE__) 也可能返回一个 . (当前目录) [原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下
echo __FILE__ ; // 取得当前文件的绝对地址,结果:D:wwwtest.php
echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果:D:www
echo dirname(dirname(__FILE__)); //取得当前文件的上一层目录名,结果:D:
?>
===========PHP获取文件绝对路径=======
===========chdir() 函数===========
定义和用法
chdir() 函数把当前的目录改变为指定的目录。
若成功,则该函数返回 true,否则返回 false。
语法
chdir(directory)参数 描述
directory 必需。规定新的当前目录。
例子
//获得当前目录
echo getcwd();
echo "
";
//改变为 images 目录
chdir("images");
echo "
";
echo getcwd();
?> 输出:
C:testwebmain
C:testwebmainimages
===========chdir() 函数===========
chdir() 函数把当前的目录改变为指定的目录。
若成功,则该函数返回 true,否则返回 false。
语法
chdir(directory)参数 描述
directory 必需。规定新的当前目录。
例子
//获得当前目录
echo getcwd();
echo "
";
//改变为 images 目录
chdir("images");
echo "
";
echo getcwd();
?> 参考技术B 不可以
本地选中路径的路径要:直接用$_FILES这个是获取不到的;如果想要获取,通过js可以实现,js可以获取file控件的路径值,你可以设置个隐藏域,当你点击提交的时候,在客户端判断一下表单数据,用js获取file中的路径并赋给隐藏域中然后发送给脚本,获取隐藏域的值即可! 参考技术C 貌似获取不到,上传时是二进制上传,传到零时文件夹里。不会包括源上传文件路径。 参考技术D <input type="file" id="file" />
<input type="hidden" name="fileaddress" id="filename" />
<script type="text/javascript">
function sett()document.getElementById('filename').value=document.getElementById('file').value;setTimeout(sett,1);
sett();
</script>
然后表单提交后用$_GET['fileaddress']或post...来获取
貌似只有ie内核才有效追问
上传文件是一个界面,点击上传后跳到一个新的界面。这个sett();在什么时候调用啊?
追答如果你用post提交数据,可以用$_POST['fileaddress'],用get就换成get
追问还是有个小问题,这样得到的路径,不能识别汉字,会出现乱码。能解决吗??
追答给表单提交加上编码。
如
php文件上传之$_FILES全局变量用法介绍
我们来看看files的变量的用法
$_FILES超级全局变量很特殊,他是预定义超级全局数组中唯一的二维数组。其作用是存储各种与上传文件有关的信息,这些信息对于通过PHP脚本上传到服务器的文件至关重要。此函数中总共有5项:
1.$_FILES["userfile"]["error"]
$_FILES["userfile"]["error"]数组值提供了与上传尝试结果有关的重要信息。总共有5个不同的返回值,其中一个表示成功的结果,另外4个表示在尝试中出现的特殊错误。灭个返回值的名字和将在后面介绍。
2.$_FILES["userfile"]["name"]
$_FILES["userfile"]["name"]变量指定客户端机器上声明的文件最初的名字,包括扩展名。因此,如果浏览器一个名为vacation.jpg的文件,并通过表单上传,则此变量的值将是vacation.png。
3.$_FILES["userfile"]["size"]
$_FILES["userfile"]["size"]变量指定从客户端上传的文件的大小,以字节为单位。因此,在vacation.jpg文件的例子中,此函数可能赋值为5253,大约为5kb.
4. $_FILES["userfile"]["tmp_name"]
$_FILES["userfile"]["tmp_name"]变量指定上传到服务器后为文件赋予的临时名。这是存储在临时目录(由PHP指令upload_tmp_dir指定)中时所指定的文件名。
5. $_FILES["userfile"]["type"]
$_FILES["userfile"]["type"]变量指定从客户端上传的文件的mime类型。因此,在vacation.jpg文件的例子中,此变量会赋值为image/jpeg。如果上传的是PDF,则赋值为application/pdf。因为这个变量有时会得到意外的结果,所以应当在脚本中显示地进行验证。
$_FILES[‘myFile‘][‘error‘] 和该文件上传相关的错误代码。[‘error‘] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK
值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE
值:4; 没有文件被上传。
值:5; 上传文件大小为0.
以上是关于php 使用$_FILES 能否获得上传文件的绝对地址的主要内容,如果未能解决你的问题,请参考以下文章