【发布时间】:2015-07-21 10:01:46
【问题描述】:
我正在使用 CLI php 脚本编写构建/部署脚本。
假设我有一个目录/environment,其中只有两个损坏的符号链接。
我正在运行glob(/environment/{,.}*)。当我遍历全局时,我看到的只有. 和..。符号链接永远不会出现在列表中。
如何使用 PHP 遍历目录、检测损坏的符号链接并unlink() 它们?
【问题讨论】:
我正在使用 CLI php 脚本编写构建/部署脚本。
假设我有一个目录/environment,其中只有两个损坏的符号链接。
我正在运行glob(/environment/{,.}*)。当我遍历全局时,我看到的只有. 和..。符号链接永远不会出现在列表中。
如何使用 PHP 遍历目录、检测损坏的符号链接并unlink() 它们?
【问题讨论】:
在损坏的符号链接上,is_link() 返回 true 和 file_exists() 返回 false。
由于glob() 不会列出损坏的符号链接,因此您必须以不同的方式列出内容。
这是一个使用scandir()的示例
foreach(scandir($dir) as $entry) {
$path = $dir . DIRECTORY_SEPARATOR . $entry;
if (is_link($path) && !file_exists($path)) {
@unlink($path);
}
}
【讨论】:
@。错误是需要的,你有足够的检查。
使用realpath函数:
foreach(scandir($dir) as $entry) {
$path = $dir . DIRECTORY_SEPARATOR . $entry;
if (!realpath($path)) {
@unlink($path);
}
}
【讨论】: