【问题标题】:php doesn't scan relative path for filesphp 不扫描文件的相对路径
【发布时间】:2010-11-24 23:55:42
【问题描述】:

这是我当前的代码(我为我第一次尝试 php 感到非常自豪)

<?php
$files = glob("/jobops/*.txt");
$indexcount = count($files);
sort($files);
print("<br>"+$indexcount+"<br>");
foreach ($files as &$file)
{
    print("<a href=\"$file\">$file</a><br>");
}
?>

问题是 glob 在根目录(此脚本所在的位置)中再次正常工作,但是当我将其指向特定文件夹时,它返回 0 个找到的文件。

我已经包含了我的 ftp 客户端的屏幕截图,显示了目录结构(如下)

所以我很困惑我在全球做错了什么

www.markonsolutions.com/test.php 是脚本所在的位置,如果您单击它将返回 0 个找到的文件

【问题讨论】:

    标签: php file glob


    【解决方案1】:
    "/jobops/*.txt"
    

    *nix 上的绝对路径,如果您想指向与您需要使用的 php 脚本位于同一目录中的目录:

    "jobops/*.txt"
    

    这是一个相对路径。

    【讨论】:

    • 或者你可以使用“./jobops/*.txt”
    • 除此之外,请确保运行 php 的用户确实有权访问该文件夹
    • 虽然我不了解实际的 OP 系统,但大多数操作系统上的错误 glob 将返回 false
    • 那行得通,我通常做 C# 编程,所以我知道我想要什么,只是在这里和那里进行一些小调整以使其正常工作,再次感谢您的帮助 +1
    【解决方案2】:

    如你所说

    "/jobops/*.txt"

    是绝对路径,因为它以“/”(斜杠)开头

    相对路径是那些不以斜线开头的路径,所以

    "jobops/*.txt"

    "./jobops/*.txt"

    "../jobops/*.txt"

    都是相对的……重点是:相对于什么?

    在操作系统上,它与环境变量 PATH 中枚举的目录有关 (通常当前工作目录是该变量中列出的第一个目录,导致错误猜测“jobops/*.txt”指的是当前目录中的 jabops 目录!)

    在PHP,也就是你的环境中,最好总是使用绝对路径,当然这并不意味着硬编码。

    我建议执行以下操作:

    dirname(__FILE__).'/jobops/*.txt'
    

    这是如何在 PHP 中正确使用路径

    【讨论】:

      【解决方案3】:

      可能是这样的:

      $files = glob($_SERVER['DOCUMENT_ROOT']."/jobops/*.txt");
      

      【讨论】:

      • 来自 glob 文档:*模式。不进行波浪号扩展或参数替换。 *
      【解决方案4】:

      如果您是从 Web 服务器运行它?难道是网络服务器的用户和组设置不允许访问其他目录?这是权限问题吗?检查 Web 服务器的 error_log 和 access_logs 以获取线索。

      【讨论】:

        猜你喜欢
        • 2017-03-26
        • 2020-10-26
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多