溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

讀出局域網(wǎng)其他服務(wù)器的共享目錄并通過php顯示目錄樹

發(fā)布時(shí)間:2020-06-18 17:32:50 來源:網(wǎng)絡(luò) 閱讀:678 作者:phpervip 欄目:開發(fā)技術(shù)

工作上有這樣一個(gè)任務(wù)。
有兩個(gè)服務(wù)器, A,B,在一個(gè)局域網(wǎng)內(nèi)。
A, 192.168.1.20
B, 192.168.1.21
A 服務(wù)器是共享服務(wù)器,安裝了smb, 在/home/share目錄下,大家可以通過smb://192.168.1.20/public 訪問到共享目錄,平常把一些文件,從自己的電腦直接復(fù)制到共享服務(wù)器的共享目錄下。
B 服務(wù)器是項(xiàng)目服務(wù)器,安裝了 lnmp。

現(xiàn)在B服務(wù)器上有TP項(xiàng)目,名稱oa,放在/data/wwwroot/oa下的,需要后臺(tái)某個(gè)頁(yè)面,顯示A服務(wù)器共享目錄的目錄和文件樹,并能下載需要的文件。

解決方法。

  1. 將A服務(wù)器的共享目錄映射到B服務(wù)器的目錄。比如同樣的:/home/share
  2. Nginx配置中設(shè)置 一個(gè)別名目錄,/share 對(duì)應(yīng) /home/share . 相當(dāng)于 /home/share 又映射到 /data/wwwroot/oa/public/share
    3 . 編寫功能代碼。

服務(wù)器
具體做法。

  1. A服務(wù)器已經(jīng)安裝samba服務(wù),B服務(wù)器安裝samba服務(wù)。

    A服務(wù)器中,smb的設(shè)置:
    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服務(wù)器安裝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

上面兩句是錯(cuò)誤的,下面這句才是對(duì)的。

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

之后,我們看B服務(wù)器的/home/share目錄下就有了。

2.在B服務(wù)器的
/usr/loccal/nginx/conf/vhost/***.conf 該網(wǎng)站相應(yīng)配置文件中,

添加如下幾行:
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();
}

/**
 * 根據(jù)文件鏈接下載本地文件
 */
public function download($filepath=''){
    // 提取文件名:
    $name_arr = explode('/',$filepath);
    $savename = $name_arr[count($name_arr)-1];
    LogService::write('內(nèi)部共享', $content = "下載",0,$filepath);
    header("Content-Disposition: attachment; filename= ".$savename."");
    header("Content-Type: application/octet-stream");
    ob_clean();  #清空輸出緩沖區(qū)
    flush();     #刷新輸出緩沖:
    header("X-Accel-Redirect: ".$filepath."");
    header("X-Accel-Buffering: yes");
}

/**
 * 列出服務(wù)器上的目錄樹
 *
 */
public function listDir($dirname='uploads'){
    static $str = '';
    if(!is_readable($dirname)){
        // 如果目錄設(shè)置為不可讀,則打不開。
    }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;
    }

}

頁(yè)面文件就參考這個(gè):
一個(gè)簡(jiǎn)單的可折疊展開的樹形目錄
https://www.cnblogs.com/dige1993/p/5985771.html

效果:
讀出局域網(wǎng)其他服務(wù)器的共享目錄并通過php顯示目錄樹

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

其他參考:
linux系統(tǒng)下掛載局域網(wǎng)內(nèi)其他操作系統(tǒng)的目錄
https://blog.csdn.net/u012272186/article/details/81010407

用mount掛載遠(yuǎn)程服務(wù)器網(wǎng)絡(luò)硬盤
https://blog.csdn.net/coolwubo/article/details/60779933?utm_source=blogxgwz2

如何在linux上安裝配置samba服務(wù)器
https://zhidao.baidu.com/question/1114841412106803419.html

Linux中配置samba服務(wù)器,實(shí)現(xiàn)局域網(wǎng)中文件共享
https://blog.51cto.com/13760226/2139355

一個(gè)簡(jiǎn)單的可折疊展開的樹形目錄
https://www.cnblogs.com/dige1993/p/5985771.html

分辨服務(wù)器是linux系統(tǒng)還是Windows系統(tǒng)
通過ping命令測(cè)試,查看返回的TTL值。TTL=128,這是WINNT/2K/XP。 TTL=32,這是WIN95/98/ME,TTL=256,這是UNIX。 TTL=64,這是LINUX。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI