有两个服务器, 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服务器共享目录的目录和文件树,并能下载需要的文件。
解决方法。
- 将A服务器的共享目录映射到B服务器的目录。比如同样的:/home/share
- Nginx配置中设置 一个别名目录,/share 对应 /home/share . 相当于 /home/share 又映射到 /data/wwwroot/oa/public/share
3 . 编写功能代码。
服务器
具体做法。
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/sharemount: unknown filesystem type ‘smbfs‘mount -o username=root,password=****** //192.168.1.20/home/share /home/sharemount: //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。
读出局域网其他服务器的共享目录并通过php显示目录树
原文地址:http://blog.51cto.com/phpervip/2301213