【问题标题】:PHP - Get File/Folder Relative PathPHP - 获取文件/文件夹相对路径
【发布时间】:2019-07-13 13:32:01
【问题描述】:

使用 JavaScript,如果你有这样设置的输入标签...

<input type="file" multiple webkitdirectory directory />

您可以通过这样做获得所选文件的相对路径...

document.getElementsByTagName('INPUT')[0].files[0].webkitRelativePath

我的问题是您如何使用 PHP 从输入标签中获取文件的相对路径?使用 PHP,您可以获取文件名、类型、大小,但如何获取其相对路径?

【问题讨论】:

    标签: php directory path relative-path


    【解决方案1】:

    相对目录在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.phpphp 文件。 php 文件将能够提取$_POST['path] 然后你在说php 中做任何你想做的事——无论你在echo/return 中将在result 的回调中

    【讨论】:

    • 无法使用客户端计算机的输入标签获取文件的相对路径?
    【解决方案2】:

    存储在您计算机上的文件的相对路径不适用于 PHP,因为它是服务器端。因此,一旦您提交表单,您的文件就会包含在请求中,并且源路径不再可用。

    但您可能会使用不同的技术(组合 JavaScript 向服务器发出异步请求 - AJAX 或其他字段,可以隐藏,存储文件路径信息)将路径信息传递给服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2011-07-31
      • 2014-11-07
      • 2020-10-31
      相关资源
      最近更新 更多