【问题标题】:Finding broken symlinks using php使用 php 查找损坏的符号链接
【发布时间】:2015-07-21 10:01:46
【问题描述】:

我正在使用 CLI php 脚本编写构建/部署脚本。

假设我有一个目录/environment,其中只有两个损坏的符号链接。

我正在运行glob(/environment/{,.}*)。当我遍历全局时,我看到的只有...。符号链接永远不会出现在列表中。

如何使用 PHP 遍历目录、检测损坏的符号链接并unlink() 它们?

【问题讨论】:

    标签: php symlink glob


    【解决方案1】:

    在损坏的符号链接上,is_link() 返回 truefile_exists() 返回 false

    由于glob() 不会列出损坏的符号链接,因此您必须以不同的方式列出内容。 这是一个使用scandir()的示例

       foreach(scandir($dir) as $entry) {
            $path = $dir . DIRECTORY_SEPARATOR . $entry;
            if (is_link($path) && !file_exists($path)) {
                @unlink($path);
            }
        }
    

    【讨论】:

    • 不要使用@。错误是需要的,你有足够的检查。
    【解决方案2】:

    使用realpath函数:

    foreach(scandir($dir) as $entry) {
        $path = $dir . DIRECTORY_SEPARATOR . $entry;
        if (!realpath($path)) {
            @unlink($path);
        }
    }
    

    【讨论】:

      【解决方案3】:

      glob 不会列出损坏的符号链接。
      要检查文件名是否存在并且是符号链接,请使用 is_link

      【讨论】:

      • 但是你不能在不知道要检查的路径的情况下运行 is_link()... 是否有一个命令可以遍历目录内容以检测 PHP 中损坏的符号链接?
      • "glob 不列出损坏的符号链接。" 这意味着如果符号链接损坏,glob 不会列出它,因此,无需检查它,因为它是已经坏了。
      • 问题是我无法获取要操作的损坏链接列表。我需要这个列表,这样我就可以遍历它们并删除它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 2012-05-12
      • 2011-08-26
      • 1970-01-01
      相关资源
      最近更新 更多