读出局域网其他服务器的共享目录并通过php显示目录树

工作上有这样一个任务。
有两个服务器, A,B,在一个局域网内。
A, 192.168.1.20
B, 192.168.1.21
A 服务器是共享服务器,安装了smb, 在/home/share目录下,大家可以通过smb://192.168.1.20/public 访问到共享目录,平常把一些文件,从自己的电脑直接复制到共享服务器的共享目录下。
B 服务器是项目服务器,安装了 lnmp。

现在B服务器上有TP项目,名称oa,放在/data/wwwroot/oa下的,需要后台某个页面,显示A服务器共享目录的目录和文件树,并能下载需要的文件。

解决方法。

  1. 将A服务器的共享目录映射到B服务器的目录。比如同样的:/home/share
  2. Nginx配置中设置 一个别名目录,/share 对应 /home/share . 相当于 /home/share 又映射到 /data/wwwroot/oa/public/share
    3 . 编写功能代码。

服务器
具体做法。

  1. A服务器已经安装samba服务,B服务器安装samba服务。

    A服务器中,smb的设置:
    vi /etc/samba/smb.conf
    有这一段:

     # A publicly accessible directory, but read only, except for people in

# the "staff" group
        [public]
        comment = Public Stuff
        path = /home/share
        public = yes
        writable = yes
        printable = no
        write list = +staff
 下面图示B服务器安装samba

yum install samba
chkconfig -- add smb
chkconfig -- add nmb
/sbin/service smb start
/sbin/service nmb start

挂载:试了几次才成功。

mount -t smbfs -o username=root,password=****** //192.168.1.20/home/share /home/share
mount: unknown filesystem type 'smbfs'
mount -o username=root,password=****** //192.168.1.20/home/share /home/share
mount: //192.168.1.20/home/share is not a valid block device

上面两句是错误的,下面这句才是对的。

mount -o username=root,password=****** //192.168.1.20/public /home/share

之后,我们看B服务器的/home/share目录下就有了。

2.在B服务器的
/usr/loccal/nginx/conf/vhost/***.conf 该网站相应配置文件中,

添加如下几行:
location /share/{
internal;
alias /home/share/;
}

3.程序代码部分:

/**
 * 展开目录树
 */
public function share_list($dirname=''){
    if(!$dirname){
        $dirname = ‘/home/share/’;
    }

    $tree = $this->listDir($dirname);
    $this->assign('tree',$tree);
    $this->setMeta('文件列表');
    return $this->fetch();
}

/**
 * 根据文件链接下载本地文件
 */
public function download($filepath=''){
    // 提取文件名:
    $name_arr = explode('/',$filepath);
    $savename = $name_arr[count($name_arr)-1];
    LogService::write('內部共享', $content = "下載",0,$filepath);
    header("Content-Disposition: attachment; filename= ".$savename."");
    header("Content-Type: application/octet-stream");
    ob_clean();  #清空输出缓冲区
    flush();     #刷新输出缓冲:
    header("X-Accel-Redirect: ".$filepath."");
    header("X-Accel-Buffering: yes");
}

/**
 * 列出服务器上的目录树
 *
 */
public function listDir($dirname='uploads'){
    static $str = '';
    if(!is_readable($dirname)){
        // 如果目录设置为不可读,则打不开。
    }else{
        $Ld= dir($dirname);
        $str .= "<ul>";
        while(false !== ($entry= $Ld->read())) {
            $checkdir=$dirname."/".$entry;
            if(is_dir($checkdir) && !preg_match("[^\.]",$entry)){
               $str .="<li>".$entry."<small>  (目录)</small>";
                $this->listDir($checkdir);
                $str .="</li>";
            }elseif(preg_match("[^\.]",$entry)){

            }else{
                $filepath = str_replace(‘/home/share/’,’/share',$checkdir);
                $url = url('admin/localnet/download',array('filepath'=>$filepath));
                $str .="<li>".$entry. "  <a href='{$url}'>下载</a></li>";
            }
        }
        $Ld->close();
        $str .="</ul>";
        return $str;
    }

}

页面文件就参考这个:
一个简单的可折叠展开的树形目录
https://www.cnblogs.com/dige1993/p/5985771.html

效果:
读出局域网其他服务器的共享目录并通过php显示目录树

如果还有不明白,可加我的 QQ:2998658517 。

其他参考:
linux系统下挂载局域网内其他操作系统的目录
https://blog.youkuaiyun.com/u012272186/article/details/81010407

用mount挂载远程服务器网络硬盘
https://blog.youkuaiyun.com/coolwubo/article/details/60779933?utm_source=blogxgwz2

如何在linux上安装配置samba服务器
https://zhidao.baidu.com/question/1114841412106803419.html

Linux中配置samba服务器,实现局域网中文件共享
https://blog.51cto.com/13760226/2139355

一个简单的可折叠展开的树形目录
https://www.cnblogs.com/dige1993/p/5985771.html

分辨服务器是linux系统还是Windows系统
通过ping命令测试,查看返回的TTL值。TTL=128,这是WINNT/2K/XP。 TTL=32,这是WIN95/98/ME,TTL=256,这是UNIX。 TTL=64,这是LINUX。

转载于:https://blog.51cto.com/phpervip/2301213

php实现文件共享(其于windows网上邻居原理)   通过本php文件,在进行相关设置后,您可以方便的看到共享目录中的文件,以及相应的说明,便于能够迅速找到自己想要的文件。   找到想要的东西后,直接点击文件夹名打开共享文件夹。 使用方法: 1: 将index.php放在网站根目录。 2: 本脚本支持从根目录向下两级目录显示,目录名可为中文英不限,但是建议使用英文。 3: 请在根目录下建好各种分类文件夹,不要在根目录下直接放普通文件。 4: 要添加新的脚本时,请在所属分类目录中再建一个目录,文件名可为中英文,取名最好简捷明了能直接说明用途。在这个文件夹内放入要用的脚本,且建一个readme.txt文件,在此txt文件中说明脚本的具体功能和用法。    当用访问的时候,脚本将直接显示在网页列表中,且在下面显示readme.txt文件中的内容。 5: 直接点击文件夹时,将自动用网上邻居打开此文件所在目录。    这个路径需要一个默认值,建议将网站的根目录直接从服务器上面共享将此共享目录的网上邻居目录填到index.php的$netdir变量的''之间。 再次重申: 1: 本脚本只支持网站根目录向下的两级文件夹,再有深层目录将不予判断。   2: 此脚本只支持ie内核的浏览器,非IE内核浏览器不支持file://abc.abc.com这样的链接,所以点了链接也打不开。 另: 只为功能所以美工基本没有,眼睛吃点苦了。        顺便宣传一下我的PHP LAMP群:34513293  WEB前端群:73269871 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值