source: trunk/Modules/NetworkShare/browse.php@ 355

Last change on this file since 355 was 129, checked in by george, 16 years ago
  • Odstraněno: Openwebmail. * Odstraněno: phpMyAdmin. * Upraveno: Mnoho malých úprav a oprav.
  • Property svn:executable set to *
File size: 8.5 KB
Line 
1<?php
2include('../style.php');
3$SambaBinDir = '/usr/bin/';
4$SambaSbinDir = '/usr/sbin/';
5$Database->select_db('share');
6$ZanoreniMax = 8; // Maximální úroven zanoreni
7$MaxProgress = 70; // Pocet casti stavu prubehu operace
8$StartTime = time();
9$MountDir = '/tmp/browse/host'; // Složka, kde se dočasně připojují síťové disky
10$TempDir = '/tmp/browse/'; // Složka, kde se dočasně připojují síťové disky
11if(!is_dir($TempDir)) mkdir($TempDir, 0777);
12if(!is_dir($MountDir)) mkdir($MountDir, 0777);
13
14// Nacteni seznamu sdileni
15$Host = strtoupper(getenv('browse_host'));
16if($Host=='') die("Musite nastavit browse_host!\n");
17$HostID = getenv('browse_id');
18if($HostID=='') die("Musite nastavit browse_id!\n");
19//echo("\n================== Prochazec sdileni =================\n\n");
20echo("Nacitam seznam sdileni pro ".$Host.'('.$HostID.')...');
21$Output = array();
22exec($SambaBinDir.'smbclient -d0 -N -L='.$Host,$Output);
23echo("OK\n");
24//print_r($Output);
25if($Output[0]=='Connection to '.$Host.' failed') die('Pocitac '.$Host." nenalezen!\n");
26$Output = array_slice($Output,3);
27$Shares = array();
28foreach($Output as $Radek)
29{
30 if($Radek=='') break;
31 //$Radek = iconv('UTF-8','ISO-8859-2',$Radek);
32 $Title = trim(substr($Radek,1,16));
33 $Type = trim(substr($Radek,16,10));
34 $Desc = trim(substr($Radek,26));
35 //echo($Title.','.$Type.','.$Desc."\n");
36 if(($Type=='Disk') && (substr($Title,-1,1)!='$')) array_push($Shares,$Title);
37 //ShowArray($Radek);
38}
39//ShowArray($Shares);
40//die();
41
42// Analyzuj slozku a projdi podslozky
43function Vetev($Cesta,$Zanoreni)
44{
45 global $Citac, $Soubor, $Host, $HostID, $Share, $ZanoreniMax, $Pocet, $Hotovo, $MountDir, $TempDir, $FileSize, $MaxProgress, $Database;
46
47 $VelikostSlozky = 0;
48 //$Vlozit = '';
49 // Nacti parent ID
50 $DbResult = $Database->query('SELECT LAST_INSERT_ID() FROM items LIMIT 0,1');
51 //echo(DB_NumRows());
52 $Row = $DbResult->fetch_array();
53 $Parent = $Row[0];
54//echo($Cesta."\n");
55 $Output = array();
56 $Cesta2 = fgets($Soubor,1024);
57 fgets($Soubor,1024);
58 $Files = array();
59 do {
60 $Nazev = fgets($Soubor,1024);
61 //echo(strlen($Nazev).",");
62 array_push($Files,$Nazev);
63 } while(($Nazev != "\n") && (!feof($Soubor)));
64 array_pop($Files);
65 //if(($Pocet-floor($Pocet/10)*10)==9)
66 $Hotovo = floor(ftell($Soubor) / $FileSize * $MaxProgress);
67 if($Hotovo >= $Pocet)
68 {
69 echo(str_repeat('#', $Hotovo-$Pocet));
70 $Pocet = $Hotovo;
71 }
72 //echo('['.memory_get_usage().'] '.$Cesta."\n");
73 foreach($Files as $Radek)
74 {
75 //echo($Radek."");
76 $Radek = substr($Radek,0,-1);
77 //echo($Radek.",\n");
78 if($Radek[0] == 'd') $Type = 2; else $Type = 0;
79 $Prava = substr($Radek,0,strpos($Radek,' '));
80 $Radek = ltrim(substr($Radek,strlen($Prava)+1));
81 $Neco = substr($Radek,0,strpos($Radek,' '));
82 $Radek = ltrim(substr($Radek,strlen($Neco)+1));
83 $User = substr($Radek,0,strpos($Radek,' '));
84 $Radek = ltrim(substr($Radek,strlen($User)+1));
85 $Group = substr($Radek,0,strpos($Radek,' '));
86 $Radek = ltrim(substr($Radek,strlen($Group)+1));
87 $Velikost = substr($Radek,0,strpos($Radek,' '));
88 $VelikostSlozky += $Velikost;
89 $Radek = ltrim(substr($Radek,strlen($Velikost)+1));
90 $Date = substr($Radek,0,strpos($Radek,' '));
91 $Radek = ltrim(substr($Radek,strlen($Date)+1));
92 $Time = substr($Radek,0,strpos($Radek,' '));
93 $Nazev = ltrim(substr($Radek,strlen($Time)+1));
94 //echo($Date.','.$Time.','.$Radek.' ');
95
96 if((strpos($Nazev,'.') > 0) && ($Type != 2))
97 {
98 $Ext = substr($Nazev,strrpos($Nazev,'.')+1);
99 $Nazev = substr($Nazev,0,strrpos($Nazev,'.'));
100 } else $Ext = '';
101 //$Vlozit .= "INSERT INTO items (name,size,date,ext,parent,type,host) ".
102 //"VALUES ('$Nazev','$Velikost',NOW(),'$Ext','$Parent','$Type','$HostID'); ";
103
104 $Database->insert('items', array(
105 'name' => $Nazev,
106 'size' => $Velikost,
107 'date' => $Date.' '.$Time,
108 //'date' => '',
109 'ext' => $Ext,
110 'parent' => $Parent,
111 'type' => $Type,
112 'host' => $HostID,
113 ));
114 $Citac = $Citac + 1;
115 // Pokud jde o sloľku, tak projdi jeji obsah a aktualizuj velikost
116 if($Type == 2)
117 {
118 //echo($Vlozit);
119 // if($Vlozit!='') DB_Query($Vlozit); // Vloz vsechny polozky
120 // $Vlozit = '';
121 $VelikostSlozky += Vetev($Cesta.$Nazev.'/',$Zanoreni+1);
122 }
123 }
124 //echo($Vlozit);
125 //if($Vlozit!='') DB_Query($Vlozit); // Vloz vsechny polozky
126
127 // Aktualizuj velikost
128 //DB_Query("SELECT SUM(size) FROM items WHERE (parent=".$Parent.")");
129 //$Row = DB_Row();
130 $Database->update('items', 'id='.$Parent, array('size' => $VelikostSlozky));
131 //closedir($Dir);
132 return($VelikostSlozky);
133}
134
135// Proskenuj jednotlive sdileni
136$Database->query('DELETE FROM items WHERE host='.$HostID); // Smaz predchozi polozky
137
138// Zapis nazev pocitace
139$Database->insert('items',array(
140 'name' => $Host,
141 'size' => 0,
142 'date' => 'NOW()',
143 'ext' => '',
144 'parent' => 1,
145 'type' => 2,
146 'host' => $HostID,
147));
148
149// Nacti Parent ID
150$DbResult = $Database->query('SELECT LAST_INSERT_ID() FROM items LIMIT 0,1');
151$Row = $DbResult->fetch_array();
152$Parent = $Row[0];
153
154foreach($Shares as $Share)
155{
156 $Pocet = 0;
157
158 // Načtení seznamu souborů sdílené jednotky
159 $ShareFull = '//'.$Host.'/'.$Share;
160 echo("Načítám strom sdílení ".$Share."...");
161 unset($Output);
162 passthru($SambaSbinDir."mount.cifs '".$ShareFull."' ".$MountDir.' -o guest codepage=cp852 iocharset=iso8859-2');
163// echo($SambaSbinDir."mount.cifs '".$ShareFull."' ".$MountDir.' -o guest,codepage=cp852,iocharset=iso8859-2');
164 passthru('ls -A -R -X -l --time-style=+"%Y-%m-%d %I:%M:%S" '.$MountDir.'>'.$TempDir.$Host.'.list 2>'.$TempDir.'errors/'.$Host.'_'.$Share.'.err',$Result);
165 //if($Result==0)
166 //{
167 echo("OK\n");
168
169 if(file_exists($TempDir.$Host.'.list'))
170 {
171 // Přidej poloľku sdílení do datanáze
172 $Database->insert('items',array(
173 'name' => $Share,
174 'size' => 0,
175 'date' => 'NOW()',
176 'ext' => '',
177 'parent' => $Parent,
178 'type' => 2,
179 'host' => $HostID,
180 ));
181
182 // Analýza souboru
183 echo("Analyzuji obsah...\n[");
184 $FileSize = filesize($TempDir.$Host.'.list');
185 $Soubor = fopen($TempDir.$Host.'.list','r');
186 $Citac = 0;
187 Vetev('/', 0); // Skenuj sdileni
188 fclose($Soubor); // Uzavřít soubor
189 unlink($TempDir.$Host.'.list'); // Smazat soubor stromu adresářové struktury
190 //echo(str_repeat('#',40-$Pocet));
191 echo("] $Citac\n");
192 //} else echo("CHYBA\n");
193 } else echo('Soubor sdílení nenalezen!');
194 passthru('umount '.$MountDir); // Odpojit sitovy disk
195}
196
197// Aktualizuj velikost dat pocitace
198$DbResult = $Database->query("SELECT SUM(size) FROM items WHERE parent=".$Parent);
199$Row = $DbResult->fetch_array();
200$Database->update('items','id='.$Parent,array('size' => $Row[0]));
201
202// Zaktivuj strom
203echo("Provadim aktivaci nove naskenovaneho stromu...");
204$Database->select_db('is');
205$DbResult = $Database->query("SELECT id FROM hosts WHERE name='".$Host."'");
206$Row = $DbResult->fetch_array();
207$NewID = $Row['id'];
208$Database->select_db('share');
209$Database->query("DELETE FROM items WHERE host=".$NewID);
210$Database->update('items','host='.$HostID,array('host' => $NewID));
211echo("OK\n");
212
213// Spočítej celkové obsazené místo
214$Database->select_db('is');
215$DbResult = $Database->query('SELECT id FROM hosts');
216$Vyber = '';
217while($Row = $DbResult->fetch_array())
218 $Vyber .= $Row['id'].',';
219
220$Database->select_db('share');
221$DbResult = $Database->query("SELECT SUM(size) FROM items WHERE ((parent=1) AND (host IN (".substr($Vyber,0,-1).')))');
222$Row = $DbResult->fetch_array();
223$Database->update('items','id=1',array('size' => $Row[0]));
224
225// Zapiš chyby do databáze
226echo("Chyby sdílení...\n");
227$Database->delete('errors', 'host="'.$Host.'"');
228if(is_dir($TempDir.'errors'))
229{
230 $Dir = scandir($TempDir.'errors');
231 foreach($Dir as $File)
232 {
233 if(substr($File, 0, strpos($File, '_')) == $Host)
234 {
235 $Share = substr($File, strpos($File, '_')+1, -4);
236 $ShareFull = '//'.$Host.'/'.$Share;
237 if(filesize($TempDir.'errors/'.$File) > 0)
238 {
239 $ErrorFile = fopen($TempDir.'errors/'.$File, 'r+');
240 while(!feof($ErrorFile))
241 {
242 $Row = fgets($ErrorFile);
243 if($Row != '')
244 {
245 $Row = substr($ShareFull.'/'.substr($Row, 39), 0, -1);
246 $Database->insert('errors', array('host' => $Host, 'message' => $Row));
247 echo($Row."\n");
248 }
249 }
250 fclose($ErrorFile);
251 }
252 }
253 }
254}
255
256echo("Doba procházení: ".date("H:i:s", time() - $StartTime - 3600)."\n\n");
257?>
Note: See TracBrowser for help on using the repository browser.