使用JavaScript,如果你有像这样设置的输入标签......
<input type="file" multiple webkitdirectory directory />
通过执行此操作,您可以获取所选文件的相对路径...
document.getElementsByTagName('INPUT')[0].files[0].webkitRelativePath
我的问题是如何使用PHP从输入标签获取文件的相对路径?使用PHP,您可以获取文件名,类型,大小但是如何获得其相对路径?
存储在计算机上的文件的相对路径不适用于PHP,因为它是服务器端。因此,一旦您提交表单,您的文件就会包含在请求中,并且源路径将不再可用。
但是你可能会使用不同的技术(JavaScript的异步请求组合 - 服务器--AJAX或其他字段,可以隐藏,存储文件路径信息)将路径信息传递给服务器。
相关目录不像你认为的那样工作在PHP
(根据你的JavaScript思维方式) - 主要是因为PHP
是服务器端,理论上可以访问操作系统内的任何文件(除非被监禁等) - 最接近你会找到类似$_SERVER['DOCUMENT_ROOT']
的东西,它会给你网络根目录的相对路径 - 但是如果你运行基于PHP
客户端 - 没有“相对根” - 在cli
,你只需使用./
(或没什么),../
,/
告诉php“与脚本相同的目录”IE
./directory/yourfile.txt //This starts in the SAME directory as the php file
../directory/yourfile.txt // This goes up one directory, and then you can drill back down.
../../../directory/directory/directory/file.txt // Just like above, but up 3 directories
/directory.file.txt // Starts from the server root -- IE /var/www/etc/etc/etc
除了使用这些方法之外,您可以使用自己的方法编写自己的处理方法等 - 尽管如此,还有很多学校。有人说使用绝对路径是要走的路......但其他人认为,便携性相对就是道路。真的,这取决于你的程序和你正在使用它的..它是否正在部署等..如果它是后者,它是基于网络的,$_SERVER['DOCUMENT_ROOT']
就足够了,但你应该构建你的程序来制作类,控制器,编码时可以轻松访问模块等。 (因此编写处理目录位置的方法)
根据您的评论更新
你问是否可以将它传递给php,答案是 - 是的,不是。
是的,如果页面已经加载,并且您希望将信息作为操作的一部分发送(表单提交/ AJAX调用)
是的,如果您已经加载了该页面,并且已经在前一页/会话中存储了包含此信息的cookie
否,如果用户从未访问过该页面并且第一次页面加载已经发生,并且预计不会发生其他操作,例如AJAX或表单提交。
根据您的要求,您应该能够简单地:
var mypath = document.getElementsByTagName('INPUT')[0].files[0].webkitRelativePath
$.post("send_path_to_php.php", {path: mypath}, function(result){
alert(result); // result of php page response
});
这将把var
mypath发送到一个名为php
的send_path_to_php.php
文件。 php
文件将能够提取$_POST['path]
然后你做任何你想要的php
- 无论你echo
/ return
将在result
的回调