PHP符号链接一个巨大的文件列表

时间:2017-12-29 17:39:58

标签: php symlink

我有一个巨大的文件列表(超过48k的路径文件),我想为这些文件做一个符号链接

这是我的PHP代码:

$files=explode("\n","files.txt");
foreach($files as $file){
$file=trim($file);
@symlink($file,"/home/".$file."@".rand(1,80000).".txt");
}

问题是这个过程需要1个多小时

我考虑先检查文件是否存在然后再进行符号链接,所以我在php.net上进行了一些研究,并且首先出现了我想要的一些函数,如is_link()和readlink(),但是评论引起了我的注意:

  

有必要通知readlink仅适用于真实链接文件,如果此链接文件位于目录中,您无法检测并读取其内容,则is_link()函数将始终返回false并且readlink()将你试图做一个警告。

所以我制作了这个新代码:

$files=explode("\n","files.txt");
foreach($files as $file){
    $file=trim($file);
    if(!empty(readlink($file))){
        @symlink($file,"/home/".$file."@".rand(1,80000).".txt");
        }
}

现在的问题是:"没有符号链接文件!"

我怎样才能防止这个问题?我应该使用多线程还是有其他选项

1 个答案:

答案 0 :(得分:0)

显然,您正在运行基于Linux的操作系统,而您的问题与文件系统有关。

在这种情况下,我建议创建bash脚本来读取file.txt并为所有这些创建符号链接。

良好的开端是:

所以你可以尝试这样的事情:

  

#!/斌/庆典
     而阅读名称
     做
         #做你想要的名字          ln -s / full / path / to / the / file / $ name /path/to/symlink/ch_img$name'.txt'
     完成< file.txt

编辑:
一线解决方案:

  

同时读取名称; do ln -s / full / path / to / the / file / $ name / path / to / symlink / shuf -i 1-80000 -n 1 $ name'.txt';完成< file.txt

注意:将“file.txt”替换为文件的完整路径。如果出现任何问题,请在少量文件上进行测试。