php linux访问 文件服务器目录,读出局域网其他服务器的共享目录并通过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服务器共享目录的目录和文件树,并能下载需要的文件。

解决方法。

将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/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 .= "

  • ";

while(false !== ($entry= $Ld->read())) {

$checkdir=$dirname."/".$entry;

if(is_dir($checkdir) && !preg_match("[^\.]",$entry)){

$str .="

".$entry."   (目录)";

$this->listDir($checkdir);

$str .="

";

}elseif(preg_match("[^\.]",$entry)){

}else{

$filepath = str_replace(‘/home/share/’,’/share',$checkdir);

$url = url('admin/localnet/download',array('filepath'=>$filepath));

$str .="

".$entry. "   下载";

}

}

$Ld->close();

$str .="

";

return $str;

}

}

效果:

ccad2cdaeb9171fdd4eaf288c7cd7678.png

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

分辨服务器是linux系统还是Windows系统

通过ping命令测试,查看返回的TTL值。TTL=128,这是WINNT/2K/XP。 TTL=32,这是WIN95/98/ME,TTL=256,这是UNIX。 TTL=64,这是LINUX。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值