我面临一个问题,我希望有一个输出来告诉我哪些文件具有相同的inode,例如"filename1和filename2是相同的“。这将是如果两个节点是相同的,但我不知道如何应用这个。我目前正在尝试创建一个数组,其中键是文件的名称,值是inode,但它不起作用(var_dump只是给了我一个空数组)。
如果我以某种方式使数组工作,那么我猜我将需要以某种方式对其进行增量,并检查两个值是否相同,然后打印它们的键。
global $hardlink;
$hardlink = [];
foreach (glob("*") as $filename) {
file_info($filename);
print_file_info();
}
var_dump($hardlink);
exit(0);
function file_info($name) {
global $info;
$info[0] = $name; // the file name
$info[1] = filesize($name); // file size
$info[2] = filetype($name); // file type
$cwd = getcwd();
$path = "$cwd/$name";
if(is_link($path)) {
$link = readlink($path);
$info[3] = "-> $link";
} else {
$info[3] = "No link";
}
$lstat = lstat($path);
$info[4] = $lstat[1];
$hardlink[$info[0]] = $info[4];
}发布于 2016-02-07 13:27:55
尝试将$hardlink添加到函数中的全局行:
function file_info($name) {
global $info, $hardlink;发布于 2016-02-07 13:28:03
您的变量范围有一个普遍的问题。这是你不应该依赖全球的众多原因之一。
$hardlink是函数file_info()中的局部变量,而不是全局变量,因此您所做的任何更改都不会出现在全局范围内。
要更好地解决此问题,请去掉全局声明并传递一个引用。
$hardlink = [];
foreach (glob("*") as $filename) {
file_info($filename, $hardlink);
print_file_info();
}
function file_info($name, &$hardlink) {
$info[0] = $name; // the file name
$info[1] = filesize($name); // file size
$info[2] = filetype($name); // file type
$cwd = getcwd();
$path = "$cwd/$name";
if(is_link($path)) {
$link = readlink($path);
$info[3] = "-> $link";
} else {
$info[3] = "No link";
}
$lstat = lstat($path);
$info[4] = $lstat[1];
$hardlink[$info[0]] = $info[4];
}注意,我将$hardlink定义为file_info函数的第二个参数中的引用,方法是以&作为前缀。
https://stackoverflow.com/questions/35253988
复制相似问题