读出局域网其他服务器的共享目录并通过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

效果:

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

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

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

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

Linux中配置samba服务器,实现局域网中文件共享
http://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。

原文地址:http://blog.51cto.com/phpervip/2301213

时间: 2024-09-30 16:38:45

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

搭建局域网Maven服务器

Nexus是Maven资源仓库管理器.如果在公司里使用Maven,通常应该在本地架设一个Maven资源仓库服务器,在代理远程资源仓库的同时 维护本地资源仓库,以节省带宽和时间,Nexus就可以满足这样的需要.此外,Nexus还提供了强大的资源仓库管理功能,构件搜索功能,它基于 REST,友好的UI是一个extjs的 REST客户端,它占用较少的内存,基于简单文件系统而非数据库.这些优点使其日趋成为最流行的Maven资源仓库管理器. 一.下载和安装Nexus 1.下载Nexus 从    http

Ubuntu16.04最快捷搭建小型局域网Git服务器

导读 使用linux操作系统,不得不提Git版本管理器,这个Linus花了两周时间开发的分布式版本管理器(这就是大神,先膜了个拜...),毫无疑问,Git版本管理器与linux系统有着与生俱来的同一血缘,故而其在linux上的表现也是如鱼得水. 那么在linux上面管理文档.程序.源码等文件最好的就是Git了,而且Git是分布式,不必与中心服务器通讯即可管理本地版本.然而,对于一个协同工作的小型团队来说,仅靠本地版本管理是严重不够的,必须通过信息交互使团队的版本保持一致,方可确保团队的方向一致.

web服务器,共享关系型数据库和NFS服务器

安装Web(这里采用编译安装) 1.httpd-2.4.2需要较新版本的apr和apr-util,因此需要事先对其进行升级.升级方式有两种,一种是通过源码编译安装,一种是直接升级rpm包,下载好安装包以后使用"rpm -Uvh"进行升级即可.这里选择使源码编译安装. 注意:安装这些软件包之前不要忘记安装开发环境了 yum -y groupinstall "Development Tools" yum -y groupinstall "Development

session和cookie区别,多台WEB服务器如何共享session,禁用COOKIE后SESSION是否可用,为什么?

答:session的运行机制: 用户A访问站点Y,如果站点Y指定了session_start();(以下假设session_start()总是存在)那么会产生一个session_id,这个session_id一般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置session.use_only_cookies为1,强制SESSIONID必须以COOKIE专递.).这时候SESSIONID表现为$_COOKIE[‘PHPSESSID’];(PHPSESSID可用session_

用CentOS,fedora等访问局域网中的Windows共享

来到Linux世界中已有一段时间了,感觉上好像自己的电脑成了一个孤岛.周围的人都还是用Windows系统,能相互共享文件,我用Linux系统,别人的共享文件都还不知道怎么访问?通过网上查资料学习,现在知道了.写笔记啦,用CentOS访问局域网中的Windows共享文件. 网上很多都讲用下面方法: # mount -t smbfs -o username="administrator",password="" //192.168.1.100/cp /mnt/ntfs

PHP实现跨服务器session共享的方法教程

今天带来PHP实现跨服务器session共享的方法教程. 本文实例讲述了PHP实现cookie跨域session共享的方法.分享给大家供大家参考,具体如下: 做过web开发的小伙伴们都了解cookie和session,cookie是存储在客户端的,session是存储在服务器的. 本篇主要通过一些实践中的案例和大家分享一下踩到坑,重点说明了cookie跨域问题和session服务器共享问题,以php语言为使用语言进行说明. 先聊聊cookie 设置cookie无效 1 setcookie("ss

配置树莓派3和局域网NTP服务器实现内网时间校准

一.配置局域网NTP服务器 1.安装ntp-4.2.8p5-win32-setup.exe 下载地址:https://www.meinbergglobal.com/english/sw/ntp.htm按默认步骤安装即可. 2.修改配置文件ntp.conf 配置文件默认路径为:C:\Program Files (x86)\NTP\etc\ntp.conf去掉 [plain] view plain copy #server 127.127.1.0 #fudge 127.127.1.0 stratum

ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 功能

ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 第一部分:使用ssh key 实现服务器间的免密码交互登陆 步骤1: 安装openssh-clients [[email protected] ~]# yum install openssh-clients -y 步骤2: 创建用户,所有机器同时操作,可直接使用root [[email protected] ~]# useradd test #如果使用root,这里跳过 [[email protected] ~]# ec

samba不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接

事实上这个不是samba的限制.是Windows的限制. 始终要用public=yes的话,上面的方法都不能有效解决,因为: 在打开存在public=yes的samba服务器时,如果首先点击了有public=yes的共享资源的时候,widows会用默认的用户名去连接服务器,一般就是windows的登录名(可以在服务器端查看到的),这时候,再去点击没有public=yes的共享资源,由于使用了user级别,服务器就会要求验证,这时,之前的默认登录已经存在,就出现了楼主的故障了.即使注销连接后如果没