Scripte

PHP Script: flatbox-0.2.1_beta.lib.php

Nach obenNach unten

Zurück zur Übersicht - Datei downloaden

  1. <?php   
  2.  
  3. ### Flat Box                  ###
  4. ### FlatBox.inc.php           ###
  5.  
  6. ### Copyright:                ###
  7. ### Thomas Schmieder          ###
  8. ### Dennis Riehle             ###
  9.  
  10. ### Stand 08.04.2005 17:06:00 ###
  11. ### Version: 0.2.1 Beta       ###
  12.  
  13.  
  14. ######################################################################
  15. #/------------------------------------------------------------------\#
  16. #|     Definition der benötigten Funktionen mit Erklärung           |#
  17. #\------------------------------------------------------------------/#
  18. ######################################################################
  19.  
  20. /*
  21. Dauerfunktionen:
  22. ================
  23. - get_error_description($code)        => Liefert eine Beschreibung zu dem
  24.                                          Fehlercode $code zurück.
  25. - get_microtime()                     => microtime() für PHP < 5
  26. - get_time_s()                        => Liefert die aktuelle Zeit zurück,
  27.                                          in einem speziallen Timestamp:
  28.                                          JahrMonatTagStundeMinuteSekunde.Millisekunden
  29. - strip($data)                        => Rekursive Entfernung der
  30.                                          Maskierungs-Backslashes in $data als Array
  31. - flat_open_lock($filepath,$lockmode) => Öffnet $filename und nutzt als
  32.                                          Sperrmethode $lockmode
  33. Einmalige Funktionen:
  34. =====================
  35. - flat_file_create($filepath)         => Erstellt die Datei $filepath und legt
  36.                                          Grundsatzinformationen an
  37. - flat_file_alter                     => Ändert die Dateien, wenn z.B. ein
  38.                                          Feld dazukommt
  39. Grundfunktionen (BIOS):
  40. =======================
  41. - flat_rec_insert                     => Schreibt einen neuen Datensatz in
  42.                                          den Flatfile
  43. - flat_rec_update                     => Erneuert Datensätze in $filepath
  44.                                          oder fügt sie hinzu, wenn die ID noch
  45.                                          nicht vorhanden war.
  46. - flat_rec_delete($filepath,$_recList) =>Löscht die Datensätze aus $_recList
  47.                                          in $filename
  48. - flat_rec_select                     => holt eine Liste aller in einem Flatfile
  49.                                          enthaltenen Datensätze
  50. Anzeigefunktionen:
  51. ==================
  52. - flat_rec_get_listdata               => Besorgt alle notwendigen Daten für
  53.                                          die HTML Ausgabe mit Blätterfunktion
  54. - flat_rec_make_list                  => Erzeugt die HTML Ausgabe für die
  55.                                          Anzeige mit Blätterfunktion
  56. - flat_rec_make_detail                => Erzeugt die HTML Ausgabe für
  57.                                          einen angeforderten Datenksatz
  58. - flat_rec_search($string)            => Sucht je nach Auswahl im Archiv oder
  59.                                          aktuell.dat nach String
  60. Backup- und Archivierungsfunktionen:
  61. ====================================
  62. - flat_rec_copy                       => Kopiert eine bestimmte Menge an
  63.                                          Datensätzen, wird zur Archivierung genutzt
  64. - flat_file_backup($filepath,$backuppath,$compress) => Erstellt ein Backup der
  65.                                          Datei $filepath am Ort $backuppath,
  66.                                          zusätzlich kann ein Komprimierungscode
  67.                                          angegeben werden.
  68. */
  69.  
  70.  
  71. #--------------------------------------------------------------------
  72. # includes und Konstanten
  73. #--------------------------------------------------------------------
  74. define ('FLAT_MAXFILESIZE',1000000);      # Maximale erlaubte Größe eines
  75.                                           # Flatfiles in Byte
  76. define ('PRINT_ERRORS', true);            # Anzeige von Fehlermeldungen
  77.                                           # durch get_error_description()
  78.  
  79.  
  80. #--------------------------------------------------------------------
  81. # Dauerfunktionen
  82. #--------------------------------------------------------------------
  83. function get_error_description($code, $print_errors = PRINT_ERRORS)
  84. {
  85.   $_errorcode = array(
  86.         //Daten fehlerfrei verarbeitet = 0
  87.          0 => "No errors, function was successfully carried out.",
  88.        
  89.         //Low-Level-Fehler, 1 - 10
  90.          2 => "<b>Low-Level Error:</b> Flat Box wasn't able to find the selected file.",
  91.          3 => "<b>Low-Level Error:</b> Selected file already exists.",
  92.          4 => "<b>Low-Level Error:</b> There are no data records, selected file is empty.",
  93.          5 => "<b>Low-Level Error:</b> Authorisation Error on low-level section.",
  94.          8 => "<b>Low-Level Error:</b> Flat Box wasn't able to write in the file.",
  95.         10 => "<b>Low-Level Error:</b> Maximum allowable filesize is transgressed.",
  96.        
  97.         //Datenfehler, 11 - 49
  98.         11 => "<b>Data Error:</b> File format doesn't match.",
  99.         12 => "<b>Data Error:</b> Still erroneous data records in ['denied'].",
  100.         13 => "<b>Data Error:</b> There are still some data records that couldn't be worked up.",
  101.         14 => "<b>Data Error:</b> There are no data records, but the file format is OK.",
  102.        
  103.         //Berechtigungsfehler der Userverwaltung, 50++
  104.          50 => "<b>Authorisation Error:</b> ...",
  105.     );
  106.  
  107.   if(isset($_errorcode[$code]) AND $print_errors)
  108.   {
  109.     echo $_errorcode[$code];
  110.   }
  111.   elseif(isset($_errorcode[$code]) AND !$print_errors)
  112.   {
  113.     return $_errorcode[$code];
  114.   }
  115.   elseif(!isset($_errorcode[$code]) AND $print_errors)
  116.   {
  117.     echo "An unknown error occured, please refer to Thomas Schmieder or Dennis Riehle to"
  118.          . " get more information.";
  119.   }
  120.   else  //elseif(!isset($_errorcode[$code]) AND !$print_errors)
  121.   {
  122.     return "An unknown error occured, please refer to Thomas Schmieder or Dennis Riehle to"
  123.            . " get more information.";
  124.   }
  125. }
  126.  
  127. #--------------------------------------------------------------------
  128. function get_microtime()
  129. {
  130.   list($usec, $sec) = explode(" ",microtime());
  131.   return ((float)$usec + (float)$sec);
  132. }
  133.  
  134. #--------------------------------------------------------------------
  135. function get_time_s()
  136. {
  137.   list($usec, $sec) = explode(" ",microtime());
  138.   $time_s = date("YmdHis").substr($usec,1,7);
  139.  
  140.   return $time_s;
  141. }
  142.  
  143. #--------------------------------------------------------------------
  144. function strip($data)       
  145. {
  146.   if (!get_magic_quotes_gpc())
  147.   {
  148.     return $data;
  149.   }
  150.  
  151.   if (is_array($data))
  152.   {
  153.     foreach($data as $key => $val)
  154.     {
  155.       $data[$key] = strip($val);
  156.     }
  157.   }
  158.   else
  159.   {
  160.     $data = stripslashes($data);
  161.   } 
  162.  
  163.   return $data;
  164. }
  165.  
  166.  
  167. #--------------------------------------------------------------------
  168. function flat_open_lock($filepath,$lockmode)
  169. {
  170.   # Lockdatei öffnen oder anlegen
  171.   for ($x=0;$x<5;$x++)
  172.   {
  173.     if($lh = @fopen($filepath,"a+")) break;
  174.     usleep(8000)## 8ms warten bis zum nächsten Versuch
  175.   }
  176.  
  177.   if (!$lh) return false
  178.  
  179.   # Lockversuch
  180.   for ($x=0;$x<5;$x++)
  181.   {
  182.     if (@flock($lh,$lockmode + LOCK_NB)) return $lh;
  183.     usleep(8000)## 8ms warten bis zum nächsten Versuch
  184.   }
  185.  
  186.   fclose($lh);
  187.   return false;
  188. }
  189.  
  190.  
  191.  
  192. #--------------------------------------------------------------------
  193. # Einmalige Funktionen
  194. #--------------------------------------------------------------------
  195. function flat_file_create($filepath)     
  196. {
  197.  clearstatcache();                     ## Statusbuffer rücksetzen
  198.  
  199.  if(file_exists($filepath)) return 3## Datei existiert schon
  200.  
  201.  $fp = flat_open_lock($filepath,LOCK_EX);
  202.  
  203.  if($fp)
  204.  {                                     ## wenn File > 0 war es schon da
  205.    if (filesize($filepath) > 0)        ## man muss das hier nochmal bzw
  206.                                        ## eigentlich erst hier testen,
  207.    {                                   ## weil zwischen Handle-Beschaffung
  208.                                        ## und Lock Zeit vergeht
  209.      fclose($fp);
  210.      return 3;                         ## Datei existiert schon
  211.    }
  212.    $time_s = get_time_s();
  213.    $time_u = time();
  214.    
  215.    $_file         = array();
  216.    $_file['meta'] = array();
  217.    $_file['data'] = array();
  218.    
  219.    $_file['meta']['created']    = $time_u;      ## erstellt am
  220.    $_file['meta']['lastupdate'] = $time_s;      ## letztes Write   
  221.    $_file['meta']['lastid']     = 0;
  222.    $_file['meta']['amount']     = 0;
  223.    
  224.    $_file_packed = serialize($_file);
  225.    fseek($fp,0);
  226.    fwrite($fp,$_file_packed,strlen($_file_packed));
  227.    fclose($fp);
  228.    
  229.    return 0;    ##Code für kein Fehler
  230.  }
  231.  else return 5; ##Code für Datei nicht geöffnet
  232. }
  233.  
  234. #--------------------------------------------------------------------
  235. function flat_file_alter()
  236. {
  237.  
  238.  
  239. }
  240.  
  241.  
  242. #--------------------------------------------------------------------
  243. # Grundfunktionen (BIOS)
  244. #--------------------------------------------------------------------
  245. function flat_rec_insert($filepath,&$_recdata)
  246. {
  247.   //status-Buffer rücksetzen
  248.   clearstatcache();
  249.  
  250.   //Datei öffnen und locken, bei Fehler abrechen
  251.   $fp = flat_open_lock($filepath,LOCK_EX);
  252.   if (!$fp) return 5; ## Datei konnte nicht gesperrt werden
  253.  
  254.   // maximale Dateigröße prüfen
  255.   $filesize = filesize($filepath);
  256.  
  257.   if ($filesize > FLAT_MAXFILESIZE)
  258.   {
  259.     fclose($fp);
  260.     return 10## max. zulässige Dateigröße überschritten
  261.   }
  262.  
  263.   if (!$filesize)  ## möglicherw. wird die Funktion das erste mal aufgerufen,
  264.                    ## dann wäre $filesize 0 und fread() gäbe einen Fehler aus
  265.   {
  266.     $_file = array();
  267.   }
  268.   else
  269.   {
  270.     //Datei entpacken
  271.     fseek($fp,0,SEEK_SET);
  272.     $_file_packed = fread($fp,$filesize);
  273.     $_file = unserialize($_file_packed);
  274.   }
  275.  
  276.   //Zeitstempel erzeugen und merken
  277.   $time_s = get_time_s();
  278.   $time_u = time();
  279.  
  280.   //$_file anlegen, falls nicht vorhanden
  281.   if(empty($_file))
  282.   {
  283.     $_file = array();
  284.     $_file['meta'] = array();
  285.     $_file['data'] = array();
  286.  
  287.     $_file['meta']['created'] = $time_u;
  288.     $_file['meta']['lastupdate'] = $time_s;       
  289.     $_file['meta']['lastid'] = 0;
  290.     $_file['meta']['amount'] = 0;
  291.   }
  292.   else
  293.   {
  294.     //Dateiformat überprüfen
  295.     if (!isset($_file['meta']['created']) or
  296.         !isset($_file['meta']['lastupdate']) or
  297.         !isset($_file['meta']['lastid']) or
  298.         !isset($_file['meta']['amount']) or
  299.         !is_array($_file['data']))
  300.     {
  301.       fclose($fp);
  302.       return 11;           ## Dateiformat passt nicht
  303.     }
  304.   }
  305.  
  306.   if (!empty($_recdata['denied']) or !empty($_recdata['meta']))
  307.   {
  308.     fclose($fp);                       ## noch fehlerhafte Datensätze im Array
  309.     return 12;                         ## oder noch Ergebnisdaten vorhanden
  310.   }
  311.   $_recdata['meta']   = array();       ## es könnten ja noch leere Strings sein
  312.   $_recdata['denied'] = array();
  313.  
  314.   $_recdata['meta']['rec_inserted'] = 0## Anzahl der fehlerfrei updated Records
  315.   $_recdata['meta']['rec_denied']  = 0;   ## Anzahl der abgelehnten Records
  316.  
  317.   foreach($_recdata['data'] as $key => $_record)
  318.   {
  319.     if(!empty($_record))
  320.     {
  321.       $_recdata['meta']['rec_inserted'] ++; ## fehlerfrei eingefügten DS zählen
  322.       $_file['meta']['lastid'] ++;   
  323.       $_file['meta']['amount'] ++;           
  324.    
  325.       $new_key = $_file['meta']['lastid'];
  326.    
  327.       $_file['data'][$new_key] = $_record;   ## Daten übertragen
  328.       $_file['data'][$new_key]['lastupdate'] = $time_s; ## Aktualisierungsdatum eintragen
  329.       $_file['data'][$new_key]['created']   = $time_u; ## Erstelldatum eintragen
  330.       unset($_recdata['data'][$key]);        ## Record aus Auftragsliste löschen
  331.    
  332.       $_recdata['rec_inserted'][$key]['new_id'] = $new_key; ## Erteilter Schlüssel
  333.     }
  334.     else
  335.     {
  336.       $_recdata['denied'][$key] = $_record## abgelehnter Datensatz
  337.       $_recdata['meta']['rec_denied'] ++;    ## "abgelehnt" zählen
  338.     }
  339.   }
  340.  
  341.   // wenn Datensätze eingefügt wurden
  342.   if ($_recdata['meta']['rec_inserted'] > 0)
  343.   {
  344.     // letzte Veränderung eintragen
  345.     $_file['meta']['lastupdate'] = $time_s;
  346.  
  347.     //Datei verpacken
  348.     $_file_packed = serialize($_file);
  349.        
  350.     //und abspeichern
  351.     fseek($fp,0);
  352.     ftruncate($fp,0);
  353.     $writeok = @fwrite($fp,$_file_packed,strlen($_file_packed));
  354.   }   
  355.  
  356.   @fclose($fp);
  357.  
  358.   //Rückgabewert der Funktion
  359.   if (!$writeok)
  360.   {
  361.     return 8;     # Fehler beim Schreiben der Daten;
  362.   } 
  363.  
  364.   if (count($_recdata['denied'])==0)
  365.   {
  366.     return 0;       # kein Fehler aufgetreten, alle Sätze verarbeitet.
  367.   }
  368.   else
  369.   {
  370.     return 13;      # nicht alle Sätze konnten verarbeitet werden
  371.   }
  372. }
  373.  
  374. #--------------------------------------------------------------------
  375. function flat_rec_select($filepath,&$_recdata,$_userdata,$_rights)
  376. {
  377.   //status-Buffer rücksetzen
  378.   clearstatcache();
  379.  
  380.   //Datei öffnen und locken, bei Fehler abrechen
  381.   $fp = flat_open_lock($filepath,LOCK_SH)
  382.  
  383.   if (!$fp) return 5;           ## Datei konnte nicht gesperrt werden
  384.  
  385.   // maximale Dateigröße prüfen
  386.   $filesize = filesize($filepath);
  387.   if ($filesize > FLAT_MAXFILESIZE + 5000)
  388.   {
  389.     fclose($fp);
  390.     return 10## max. zulässige Dateigröße überschritten
  391.   }
  392.        
  393.   //Datei entpacken
  394.   fseek($fp,0,SEEK_SET);
  395.   $_file_packed = fread($fp,$filesize);
  396.   fclose($fp);       
  397.   $_file = unserialize($_file_packed);
  398.  
  399.   //abbrechen, falls $_file leer ist
  400.   if(empty($_file) or ($filesize == 0))
  401.   {
  402.     return 4;
  403.   }
  404.   else
  405.   {
  406.     //Dateiformat überprüfen
  407.     if (!isset($_file['meta']['created']) or
  408.         !isset($_file['meta']['lastupdate']) or
  409.         !isset($_file['meta']['lastid']) or
  410.         !isset($_file['meta']['amount']) or
  411.         !is_array($_file['data']))
  412.     {
  413.       return 11;           ## Dateiformat passt nicht
  414.     }
  415.  
  416.      
  417.     $_recdata = array();
  418.     $_recdata['meta'] = $_file['meta'];      ## Metadaten übertragen
  419.     $_recdata['meta']['rec_denied']    = 0## Anzahl der verbotenen Records
  420.     $_recdata['meta']['rec_selected']  = 0## Anzahl der gelieferten Records
  421.  
  422.  
  423.     foreach($_file['data'] as $key => $_record)
  424.     {
  425.       if(isset($_record['rights']) and (false))           ## Einschränkende rechte vorhanden
  426.       {
  427.         $_recdata['meta']['rec_denied'] ++;              ## mangelnde Userrechte
  428.       }
  429.       else
  430.       {
  431.         $_recdata['meta']['rec_selected'] ++;            ## erlaubter Datensatz
  432.         $_recdata['data'][$key] = $_record;              ## Daten übertragen
  433.       }
  434.     }
  435.     ksort($_recdata['data']);                            ## nach IDs sortieren
  436.   }
  437.  
  438.      
  439.   //Rückgabewert der Funktion
  440.  
  441.   if ($_recdata['meta']['rec_denied'] == 0)              ## alle Sätze erlaubt
  442.   {
  443.     return 0;       # kein Fehler aufgetreten, alle Sätze verarbeitet.
  444.   }
  445.   else
  446.   {
  447.     return 13;      # nicht alle Sätze konnten verarbeitet werden
  448.   }
  449. }
  450.  
  451. #--------------------------------------------------------------------
  452. function flat_rec_update($filepath,&$_recdata)
  453. {
  454.   //status-Buffer rücksetzen
  455.   clearstatcache();
  456.  
  457.   //Datei öffnen und locken, bei Fehler abrechen
  458.   $fp = flat_open_lock($filepath,LOCK_EX);
  459.   if (!$fp) return 5; ## Datei konnte nicht gesperrt werden
  460.  
  461.   // maximale Dateigröße prüfen
  462.   $filesize = filesize($filepath);
  463.   if ($filesize > FLAT_MAXFILESIZE)
  464.   {
  465.     fclose($fp);
  466.     return 10## max. zulässige Dateigröße überschritten
  467.   }
  468.        
  469.   //Datei entpacken
  470.   fseek($fp,0,SEEK_SET);
  471.   $_file_packed = fread($fp,$filesize);
  472.   $_file = unserialize($_file_packed);
  473.      
  474.  
  475.   //Zeitstempel erzeugen und merken
  476.   $time_s = get_time_s();
  477.   $time_u = time();
  478.  
  479.   //$_file anlegen, falls nicht vorhanden
  480.   if(empty($_file))
  481.   {
  482.     $_file = array();
  483.     $_file['meta'] = array();
  484.     $_file['data'] = array();
  485.  
  486.     $_file['meta']['created'] = $time_u;
  487.     $_file['meta']['lastupdate'] = $time_s;       
  488.     $_file['meta']['lastid'] = 0;
  489.     $_file['meta']['amount'] = 0;
  490.   }
  491.   else
  492.   {
  493.     //Dateiformat überprüfen
  494.     if (!isset($_file['meta']['created']) or
  495.         !isset($_file['meta']['lastupdate']) or
  496.         !isset($_file['meta']['lastid']) or
  497.         !isset($_file['meta']['amount']) or
  498.         !is_array($_file['data']))
  499.     {
  500.       fclose($fp);
  501.       return 11;           ## Dateiformat passt nicht
  502.     }
  503.  
  504.     if (!empty($_recdata['denied']) or !empty($_recdata['meta']))
  505.     {
  506.       fclose($fp);                       ## noch fehlerhafte Datensätze im Array
  507.       return 12;                         ## oder noch Ergebnisdaten vorhanden
  508.     }
  509.     $_recdata['meta']   = array();       ## es könnten ja noch leere Strings sein
  510.     $_recdata['denied'] = array();
  511.   }
  512.      
  513.   $_recdata['meta']['rec_updated'] = 0## Anzahl der fehlerfrei updated Records
  514.   $_recdata['meta']['rec_denied']  = 0## Anzahl der abgelehnten Records
  515.  
  516.   foreach($_recdata['data'] as $key => $_record)
  517.   {
  518.     if(isset($_file['data'][$key]))      ## Datensatz ist vorhanden
  519.     {
  520.       if ($_file['data'][$key]['lastupdate'] == $_record['lastupdate'])
  521.       {
  522.         $_recdata['meta']['rec_updated'] ++;           ## fehlerfrei updated zählen
  523.         $_file['data'][$key] = $_record;               ## Daten übertragen
  524.         $_file['data'][$key]['lastupdate'] = $time_s;   ## Aktualisierungsdatum eintragen
  525.         unset($_recdata['data'][$key]);                ## Record aus Auftragsliste löschen
  526.       }
  527.       else
  528.       {
  529.         $_recdata['denied'][$key] = $_file['data'][$key]; ## Daten aus dem File holen
  530.         $_recdata['meta']['rec_denied'] ++;               ## "abgelehnt" zählen
  531.       }
  532.     }
  533.     else  ## Datensatz aus der Auftragsliste ist noch nicht im File
  534.     {
  535.       if ($key > $_file['meta']['lastid'])             ## wenn die ID aus der Auftragsliste
  536.       {                                                ## größer als die größte ID im File
  537.         $_file['meta']['lastid'] = $key;               ## ist, lastID erhöhen
  538.       }
  539.      
  540.       if (trim($_record['lastupdate']) == "")           ## record hat keinen Meinstamp
  541.       {
  542.         $_record['lastupdate'] = $time_s;               ## Aktualisierungsdatum eintragen
  543.       }
  544.      
  545.       $_file['data'][$key] = $_record;                 ## Satz hinzufügen
  546.       $_file['meta']['amount'] ++;                     ## datensatz im File zählen
  547.       $_recdata['meta']['rec_updated'] ++;             ## erfolgreichen Auftrag zählen
  548.       unset($_recdata['data'][$key]);                  ## Record aus Auftragsliste löschen     
  549.     }
  550.   }
  551.  
  552.   //wenn Datensätze verändert oder eingefügt wurden
  553.   if ($_recdata['meta']['rec_updated'] >0)
  554.   {
  555.     // letzte Veränderung eintragen
  556.     $_file['meta']['lastupdate'] = $time_s;
  557.  
  558.     //Datei verpacken
  559.     $_file_packed = serialize($_file);
  560.      
  561.     //und abspeichern
  562.     fseek($fp,0);
  563.     ftruncate($fp,0);
  564.     $writeok = @fwrite($fp,$_file_packed,strlen($_file_packed));
  565.   } 
  566.    
  567.   @fclose($fp);
  568.      
  569.   //Rückgabewert der Funktion
  570.  
  571.   if (!$writeok) return 8; # Fehler beim Schreiben;
  572.  
  573.   if (count($_recdata['denied'])==0)
  574.   {
  575.     return 0;       # kein Fehler aufgetreten, alle Sätze verarbeitet.
  576.   }
  577.   else
  578.   {
  579.     return 13;      # nicht alle Sätze konnten verarbeitet werden
  580.   }
  581. }
  582.  
  583.  
  584. #--------------------------------------------------------------------
  585. function flat_rec_delete($filepath,&$_recdata)
  586. {
  587.   //status-Buffer rücksetzen
  588.   clearstatcache();
  589.  
  590.   //Datei öffnen und locken, bei Fehler abrechen
  591.   $fp = flat_open_lock($filepath,LOCK_EX);
  592.   if (!$fp) return 5; ## Datei konnte nicht gesperrt werden
  593.  
  594.   // maximale Dateigröße prüfen
  595.   $filesize = filesize($filepath);
  596.  
  597.  
  598.   // maximale Dateigröße zuzüglich Sicherheitszuschlag für LESEN
  599.   if ($filesize > FLAT_MAXFILESIZE + 5000)
  600.   {                             
  601.     fclose($fp);
  602.     return 10## max. zulässige Dateigröße überschritten
  603.   }
  604.    
  605.   //Datei entpacken
  606.   fseek($fp,0,SEEK_SET);
  607.   $_file_packed = fread($fp,$filesize);
  608.   $_file = unserialize($_file_packed);
  609.  
  610.   //Zeitstempel erzeugen.
  611.   $time_s = get_time_s();
  612.  
  613.   //Prüfen, ob $_file Daten enthält
  614.   if(empty($_file))
  615.   {
  616.     return 4;              ## Keine Daten vorhanden
  617.   }
  618.   else
  619.   {
  620.     //Dateiformat überprüfen
  621.     if (!isset($_file['meta']['created']) or
  622.         !isset($_file['meta']['lastupdate']) or
  623.         !isset($_file['meta']['lastid']) or
  624.         !isset($_file['meta']['amount']) or
  625.         !is_array($_file['data']))
  626.     {
  627.       fclose($fp);
  628.       return 11;           ## Dateiformat passt nicht
  629.     }
  630.  
  631.     if (!empty($_recdata['denied']) or !empty($_recdata['meta']))
  632.     {
  633.       fclose($fp);
  634.       return 12;           ## noch fehlerhafte Datensätze im Array
  635.     }                      ## oder noch falsche Ergbnisdaten
  636.     $_recdata['meta']   = array();
  637.     $_recdata['denied'] = array();
  638.    
  639.   }
  640.  
  641.   $_recdata['meta']['rec_deleted'] = 0## Anzahl der fehlerfrei gelöschten Records
  642.   $_recdata['meta']['rec_denied']  = 0## Anzahl der abgelehnten Records
  643.  
  644.   foreach($_recdata['data'] as $key => $_record)
  645.   {
  646.     if(isset($_file['data'][$key]))      ## Datensatz ist vorhanden
  647.     {
  648.       if ($_file['data'][$key]['lastupdate'] == $_record['lastupdate'])
  649.       {
  650.         $_recdata['meta']['rec_deleted'] ++;  ## fehlerfrei updated zählen
  651.         unset($_file['data'][$key]);          ## Daten löschen
  652.         unset($_recdata['data'][$key]);       ## Record aus Auftragsliste löschen
  653.         $_file['meta']['amount']--;           ## Satzanzahl verringern
  654.       }
  655.       else
  656.       {
  657.         $_recdata['denied'][$key] = $_file['data'][$key]; ## Daten aus dem File holen
  658.         $_recdata['meta']['rec_denied'] ++;               ## "abgelehnt" zählen
  659.       }
  660.     }
  661.     else        ## Datensatz aus der Auftragsliste ist nicht im File
  662.     {
  663.       unset($_recdata['data'][$key]);       ## Record aus Auftragsliste löschen   
  664.     }
  665.   }
  666.  
  667.   // Wenn datensätze gelöscht wurden
  668.   if ($_recdata['meta']['rec_deleted'] >0)
  669.   {
  670.     // letzte Veränderung eintragen
  671.     $_file['meta']['lastupdate'] = $time_s;
  672.  
  673.     //Datei verpacken
  674.     $_file_packed = serialize($_file);
  675.      
  676.     //und abspeichern
  677.     fseek($fp,0);
  678.     ftruncate($fp,0);
  679.     $writeok = @fwrite($fp,$_file_packed,strlen($_file_packed));
  680.   }
  681.  
  682.   @fclose($fp);
  683.      
  684.   //Rückgabewert der Funktion
  685.  
  686.   if (!$writeok) return 8;   ## Fehler beim Schreiben;
  687.  
  688.   if (count($_recdata['denied'])==0)
  689.   {
  690.     return 0;       # kein Fehler aufgetreten, alle Sätze wurden gelöscht.
  691.   }
  692.   else
  693.   {
  694.     return 13;      # nicht alle Sätze konnten verarbeitet werden
  695.   }
  696. }
  697.  
  698.  
  699. #--------------------------------------------------------------------
  700. # Anzeigefunktionen
  701. #--------------------------------------------------------------------
  702. function flat_rec_get_listdata($filepath,&$_showdata,&$nextID,&$lastID,$startID=false,$show=5,
  703.                               $_userdata=false,$_rights=false)
  704. {
  705.   //status-Buffer rücksetzen
  706.   clearstatcache();
  707.  
  708.   //alle Daten einlesen
  709.   $ok = flat_rec_select($filepath,&$_recdata,$userdata=false,$_right=false);
  710.  
  711.   //und bei Fehler abbrechen
  712.   if($ok != 0) return $ok;
  713.  
  714.   if(!$startID) $startID = $_recdata['meta']['lastid'];
  715.  
  716.   //Der Zähler für bereits rüberkopierte Datensätze auf 0 setzen
  717.   $count = 0;
  718.  
  719.   for($ID = $startID; $ID >= 0; $ID--)
  720.   {
  721.     //Wenn der Datensatz vorhanden ist
  722.     if(isset($_recdata['data'][$ID]))
  723.     {
  724.       //und noch Datensätze bis zum Soll fehlen
  725.       if($count < $show)
  726.       {
  727.         //Dann kopiere diesen Datensatz rüber
  728.         $_showdata['data'][$ID] = $_recdata['data'][$ID];
  729.         $count++;
  730.       }
  731.       //und das Soll errreicht ist
  732.       else
  733.       {
  734.         //Diese ID als nächste ID festhalten
  735.         $nextID = $ID;
  736.         //Und abbrechen
  737.         break;
  738.       }
  739.     }
  740.     //Wenn der Datensatz nicht vorhanden ist,
  741.     //einfach weitermachen
  742.   }
  743.   //Falls keine Datensätze gefunden wurden
  744.   if(empty($nextID)) $nextID = false;
  745.  
  746.   //LastID ermitteln:
  747.   //Den Zähler wieder auf null setzen
  748.   $count = 0;
  749.   for($ID = $startID; $ID <= $_recdata['meta']['lastid']; $ID++)
  750.   {
  751.     //Wenn der Datensatz vorhanden ist
  752.     if(isset($_recdata['data'][$ID]))
  753.     {
  754.       if($count < $show)
  755.       {
  756.         $count++;
  757.       }
  758.       else
  759.       {
  760.         $lastID = $ID;
  761.         break;
  762.        }
  763.     }
  764.     //Wenn der Datensatz nicht vorhanden ist,
  765.     //einfach weitermachen
  766.   }
  767.   //Wenn die lastID noch nicht herrausgefunden wurde
  768.   if(empty($lastID))
  769.   {
  770.     //Auf false setzen wenn gleich der es keine vorherigen Einträge
  771.     //mehr gibt
  772.     if($startID == $_recdata['meta']['lastid']) $lastID = false;
  773.     //Oder ansonsten auf die höchste ID setzen
  774.     else $lastID = $_recdata['meta']['lastid'];
  775.   }
  776.  
  777.   //Rückgabewert feststellen
  778.   if(empty($_showdata)) return 4; //Keine Daten vorhanden
  779.   else                  return 0; //Alles OK ;-)
  780. }
  781.  
  782. #--------------------------------------------------------------------
  783. function flat_rec_make_list($filepath,$startID=false,$show=5,$_userdata=false,$_rights=false)
  784. {
  785.   //status-Buffer rücksetzen
  786.   clearstatcache();
  787.  
  788.   $ok = flat_rec_get_listdata($filepath,$_showdata,$nextID,$lastID,$startID,$show,
  789.                                                          $_userdata=false,$_rights=false);
  790.  
  791.   //Bei Fehler abbrechen
  792.   if($ok != 0) return $ok;
  793.  
  794.   echo "<h2>Übersicht alles ausgewählten Records</h2>\n\n";
  795.   foreach($_showdata['data'] as $id => $_record)
  796.   {
  797.     echo "<div class=\"beitrag\">\n";
  798.     echo "Eintrags ID: $id<br>\n";
  799.     echo "<a href=\"".$_SERVER['PHP_SELF']."?detailID=".$id."&amp;backID=".$startID."\">Details</a><br>\n";
  800.     echo "</div>\n\n";
  801.   }
  802.  
  803.   if($lastID != false)
  804.   {
  805.     echo "<a href=\"".$_SERVER['PHP_SELF']."?startID=".$lastID."\">Vorherige Einträge</a><br>\n";
  806.   }
  807.   if($nextID != false)
  808.   {
  809.     echo "<a href=\"".$_SERVER['PHP_SELF']."?startID=".$nextID."\">Weitere Einträge</a><br>\n";
  810.   }
  811. }
  812.  
  813. #--------------------------------------------------------------------
  814. function flat_rec_make_detail($filepath,$dataID,$backStartID = false)
  815. {
  816.   //status-Buffer rücksetzen
  817.   clearstatcache();
  818.  
  819.   //Einen Datensatz holen
  820.   $ok = flat_rec_get_listdata($filepath,$_showdata,$nextID,$lastID,$dataID,$show = 1,
  821.                                                          $_userdata=false,$_rights=false);
  822.  
  823.   //Bei Fehler abbrechen
  824.   if($ok != 0) return $ok;
  825.  
  826.   //Es ist maximal ein Record im Array $_showdata['data']
  827.   foreach($_showdata['data'] as $id => $_record)
  828.   {
  829.     echo "<h3>Detailansicht eines Records</h3>\n";
  830.     echo "<div class=\"beitrag\">\n";
  831.     echo "  <table cellpadding=2 cellspacing=2>\n";
  832.     foreach($_showdata['data'][$id] as $key => $value)
  833.     {
  834.       echo "    <tr>\n";
  835.       echo "        <td>".$key.":</td>\n";
  836.       echo "        <td>".$value."</td>\n";
  837.       echo "    </tr>\n";
  838.     }
  839.     echo "  </table>\n";
  840.     echo "</div>\n\n";
  841.   }
  842.  
  843.   //Wenn eine Zurück ID angegeben wurde, diese ausgeben
  844.   if($backStartID)
  845.   {
  846.     echo "<a href=\"".$_SERVER['PHP_SELF']."?startID=".$lastID."\">Zurück</a><br>\n";
  847.   }
  848. }
  849.  
  850. #--------------------------------------------------------------------
  851. function flat_rec_search()
  852. {
  853.  
  854.  
  855. }
  856.  
  857.  
  858. #--------------------------------------------------------------------
  859. # Backup- und Archivierungsfunktionen
  860. #--------------------------------------------------------------------
  861. function flat_rec_copy()
  862. {
  863.  
  864.  
  865. }
  866.  
  867. #--------------------------------------------------------------------
  868. function flat_file_backup($filepath,$backuppath,$compress=0)
  869. {
  870.   //status-Buffer rücksetzen
  871.   clearstatcache();
  872.  
  873.   //Datei öffnen und locken, bei Fehler abrechen
  874.   $fp = flat_open_lock($filepath,LOCK_EX);
  875.   if (!$fp) return 5; ## Datei konnte nicht gesperrt werden
  876.  
  877.   $filesize = filesize($filepath);
  878.  
  879.   // maximal zulässige Filegröße + Sicherheit zum Öffnen
  880.   if ($filesize > FLAT_MAXFILESIZE+5000)
  881.   {                             
  882.     fclose($fp);
  883.     return 10## max. zulässige Dateigröße überschritten
  884.   }
  885.  
  886.   //Datei einlesen
  887.   fseek($fp,0,SEEK_SET);
  888.   $_file_packed = fread($fp,$filesize);
  889.  
  890.   fclose($fp);
  891.  
  892.   if($backuppath===false)
  893.   {
  894.     $backuppath = $filepath . date(".Ymd");
  895.   }
  896.  
  897.   // wahlweise Komprimierung durchführen
  898.   $compress = intval($compress);
  899.   if ($compress > 0)
  900.   {
  901.     $backuppath .= '.cpr';
  902.     $_file_packed = gzencode($_file_packed,$compress)## gZIP erstellen
  903.   }
  904.    
  905.   if($compress == 0)
  906.   {
  907.     $backuppath .= '.abk';
  908.   }
  909.    
  910.    
  911.   $fp = flat_open_lock($backuppath,LOCK_EX);
  912.   if (!$fp) return 5; ## Datei konnte nicht gesperrt werden
  913.  
  914.   // prüfen, ob Ausgabefile schon Daten enthielt.
  915.   $filesize = filesize($backuppath);
  916.   if ($filesize > 0)
  917.   {
  918.     fclose($fp);
  919.     return 3## File existiert schon
  920.   }
  921.  
  922.   fwrite($fp,$_file_packed,strlen($_file_packed));
  923.   fclose($fp);
  924.  
  925.   return 0## Kein Fehler aufgetreten
  926. }
  927.  
  928.  
  929. /*
  930.     ENDE
  931. */
  932.  
  933. ?>

Zurück zur Übersicht - Datei downloaden

Nach obenNach unten

Valid XHTML 1.0! Valid CSS!

Letzte Änderungen: Sonntag, der 03. Februar 2008
© 2005, Dennis Riehle.