Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Synchronizacja plików filesystem - baza danych
Forum PHP.pl > Forum > PHP
P3A_MDF
Muszę synchronizować strukturę plików/katalogów do bazy danych.
Tabela wygląda tak: name,parent,depth,path
Wgranie plików do bazy było łatwe, ale aktualizacja to już co innego.
Gdy pojawi się nowy plik/katalog musi zostać dodany do tabeli,
podobnie gdy zostanie usunięty, musi zostać z tabeli usunięty.

Nowo dodane pliki potrafię dodawać ale pliki usunięte z systemu plików już nie.
Kombinuje tak:
  1. <?php
  2. class update {
  3. private $curentDir;
  4. private $dbTable='jos_tree6';
  5. public $time_start;
  6. public $dbSelectCount=0;
  7. public $dbInsertCount=0;
  8. private $db;
  9. public $queries=array();
  10.  
  11. public function dbstart() {
  12. $this->time_start = microtime(true);
  13. $pinfo=pathinfo(__FILE__);
  14. $this->curentDir = $pinfo['dirname'];
  15. $this->db = mysqli_connect('localhost','to','to12345') or die("Database error");
  16. mysqli_select_db($this->db, 'joomla3');
  17. }
  18.  
  19. public function __destruct() {
  20. mysqli_close($this->db);
  21. }
  22.  
  23.  
  24. public function update1() {
  25.  
  26. $parent=1;
  27. $r=$this->query(1);
  28. var_dump($r);
  29. $d = $this->readDir($this->curentDir . '/tmp/root/', $r);
  30. }
  31.  
  32.  
  33. private function readDir($dir, $dirdb) {
  34.  
  35. $insertid=0;
  36.  
  37. $listDir = array();
  38. if($handler = opendir($dir)) {
  39.  
  40. while (($sub = readdir($handler)) !== FALSE) {
  41. if ($sub != "." && $sub != ".." && $sub != "Thumb.db") {
  42. $tmpDir=array();
  43. $exist=false;
  44. $parent=false;
  45. foreach ($dirdb as $db) {
  46. if ($sub===$db['name']) {
  47. $parent=$db['id'];
  48. $exist=true;
  49. }
  50. }
  51. if ($exist===false) {
  52. echo '<p>DODAJE DO BAZY: ' . $sub . '</p>'; // DODAWANIE
  53. }
  54.  
  55. if(is_file($dir."/".$sub)) {
  56. $listDir[] = $sub;
  57. } elseif(is_dir($dir."/".$sub)){
  58. $listDir[$sub] = $this->readDir($dir."/".$sub, $this->query($parent));
  59. }
  60. }
  61. $this->count++;
  62. }
  63. closedir($handler);
  64.  
  65. }
  66. return $listDir;
  67. }
  68.  
  69.  
  70. public function query($parent) {
  71. $q="SELECT id, name, depth, path, dir FROM ".$this->dbTable." WHERE parent = ". intval($parent);
  72. $this->queries[]=$q;
  73. $this->dbSelectCount++;
  74. $result = mysqli_query($this->db, $q);
  75. if (!$result) return false;
  76. $a=array();
  77. while ($row = mysqli_fetch_assoc($result)) {
  78. $a[] = $row;
  79. }
  80. return $a;
  81. }
  82. }
  83.  
  84. $up = new update();
  85. $up->dbstart();
  86. $r2 = $up->update1();
maly_swd
co do sprawdzenia skasowanych plikow to:
wchodzisz do katalogu , robisz glob do tablicy , z tablicy robisz stringa 'nazwa pliku', 'nastepny plik', itd

pozniej robisz delete from pliki wher nazwa not in (i tu wstawiasz tablice z plikami ktore masz na dysku) where catalog='{$catalog}'
P3A_MDF
Jakoś już sobie radzę ale sprawę komplikuję jeszcze to że plików/katalogów jest ok. 28000
Zastanawiam się czy nie lepiej pobrać na raz całą tabelę do pamięci
niż robić zapytanie dla każdego katalogu czy podobnie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.