相对目录在PHP 中的工作方式与您认为的不同(根据您的 JavaScript 思维方式)
-- 主要是因为PHP 是服务器端 并且理论上可以访问操作系统中的任何文件(除非被监禁等) -- 你会找到最接近的类似$_SERVER['DOCUMENT_ROOT'] 的东西为您提供 web 根目录 的相对路径 -- 但是,如果您正在运行基于客户端的 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
除了使用这些方法之外,您还可以编写自己的方法来使用您自己的方法等来处理这个问题——这方面也有很多学派。有人说使用 absolute 路径是要走的路……但其他人则认为对于可移植性而言,relative 才是正确的方法。真的,这取决于您的程序以及您使用它的目的..是否正在部署等..如果是后者,并且它是基于网络的,$_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 发送到名为send_path_to_php.php 的php 文件。 php 文件将能够提取$_POST['path] 然后你在说php 中做任何你想做的事——无论你在echo/return 中将在result 的回调中