Scripte

PHP Script: flatbox-0.3.1_beta.lib.php

Nach obenNach unten

Zurück zur Übersicht - Datei downloaden

  1. <?php
  2.  
  3. ######################################################################
  4. #/------------------------------------------------------------------\#
  5. #|            ____               _____   __    __                   |#
  6. #|            |__   |      /\      |    |  |  |  |  \ /             |#
  7. #|            |     |     /--\     |    |-{   |  |   X              |#
  8. #|            |     |__  /    \    |    |__|  |__|  / \             |#
  9. #|                                                                  |#
  10. #\------------------------------------------------------------------/#
  11. ######################################################################
  12.  
  13.  
  14. ### FlatBox - Verwalten von Datensätzen in FlatFiles (Textdateien) ###
  15.  
  16. ### Autoren:                                                       ###
  17. ### ===============                                                ###
  18. ### Thomas Schmieder  <tschmider@bitworks.de>                      ###
  19. ### Dennis Riehle     <selfhtml@riehle-web.com>                    ###
  20.  
  21. ### Stand:    17.01.2006 17:12:51                                  ###
  22. ### Version:  0.3.1                                                ###
  23. ### Stable?   Beta                                                 ###
  24.  
  25.  
  26. ######################################################################
  27. #/------------------------------------------------------------------\#
  28. #|                              Lizenz                              |#
  29. #\------------------------------------------------------------------/#
  30. ######################################################################
  31.  
  32. /*
  33. */
  34.  
  35.  
  36. ######################################################################
  37. #/------------------------------------------------------------------\#
  38. #|                            Changelog                             |#
  39. #\------------------------------------------------------------------/#
  40. ######################################################################
  41.  
  42. /*
  43. - Die Funktionen flat_array_read() und flat_array_write() eingeführt,
  44.   schließlich handelt es bei dem (Un-) Serialisieren um einen immer
  45.   wiederkehrenden Prozess, deshalb sind da eigene Funktionen angebracht.
  46.   Das Zurückgreifen auf diese Funktionen innerhalb aller anderen
  47.   Prozeduren ist für 0.3.2 geplant.
  48. */
  49.  
  50.  
  51. ######################################################################
  52. #/------------------------------------------------------------------\#
  53. #|     Definition der benötigten Funktionen mit Erklärung           |#
  54. #\------------------------------------------------------------------/#
  55. ######################################################################
  56.  
  57. /*
  58. Hinweis: Eine ausführliche Beschreibung der Funktionen, sowie eine
  59.          Auflistung derer Parameter finden Sie in der Dokumentation zur
  60.          FlatBox.
  61. Dauerfunktionen:
  62. ================
  63. - get_error_description               => Ist für die Ausgabe von Fehlermeldungen
  64.                                          verantwortlicht.
  65. - get_microtime                       => Besorgt einen Timestamp der aktuellen
  66.                                          Uhrzeit in Millisekunden
  67. - get_time_s                          => Liefert einen Spezial Timestamp in
  68.                                          Millisekunden zurück
  69. - strip                               => Rekursive Entfernung der
  70.                                          Maskierungs-Backslashes, sofern
  71.                                          magic_quotes aktiviert sind
  72. - flat_open_lock                              => Öffnet und sperrt Dateien, existiert
  73.                                          die Datei nicht, wird sie angelegt
  74. - flat_array_read                     => Liest serialisierte Daten aus einem
  75.                                          File
  76. - flat_array_write                    => Schreibt ein Array als serialisierte
  77.                                          Daten in einen File
  78. Einmalige Funktionen:
  79. =====================
  80. - flat_file_create                        => Legt einen FlatFile an und füllt ihn
  81.                                          mit den Meta Daten
  82. - flat_file_alter                     => Ändert die Dateien, wenn z.B. ein
  83.                                          Feld dazukommt
  84. Grundfunktionen (BIOS):
  85. =======================
  86. - flat_rec_insert                     => Schreibt einen neuen Datensatz in
  87.                                          eine Datei, bzw. legt eine Datei davor
  88.                                          auch an
  89. - flat_rec_select                     => holt eine Liste aller Datensätze
  90.                                          aus einem File
  91. - flat_rec_update                     => Aktualisiert Datensätze in einer Datei
  92.                                          nach lastupdate Vergleich
  93. - flat_rec_delete                               => Löscht Datensätze in einer Datei
  94. Anzeigefunktionen:
  95. ==================
  96. - flat_rec_get_listdata               => Besorgt alle notwendigen Daten für
  97.                                          die HTML Ausgabe mit Blätterfunktion
  98. - flat_rec_make_list                  => Erzeugt die HTML Ausgabe für die
  99.                                          Anzeige mit Blätterfunktion
  100. - flat_rec_make_detail                => Erzeugt die HTML Ausgabe für
  101.                                          einen angeforderten Datenksatz
  102. - flat_rec_search                     => Sucht im übergebenen Array der Datensätze
  103.                                          nach bestimmtem Text, auch reguläre
  104.                                          Ausdrücke können angewandt werden
  105. - flat_rec_filter                               => Filtert Datensätze anhand ihrer ID
  106.                                          aus den Informationen von flat_rec_select
  107.                                          herraus
  108. Backup- und Archivierungsfunktionen:
  109. ====================================
  110. - flat_rec_copy                       => Kopiert eine bestimmte Menge an
  111.                                          Datensätzen, wird zur Archivierung genutzt
  112.                                          -- nocht nicht geschrieben! --
  113. - flat_file_backup                    => Erstellt ein Backup von FlatFiles,
  114.                                          zusätzlich kann ein Komprimierungsgrad
  115.                                          angegeben werden.
  116. */
  117.  
  118.  
  119. #--------------------------------------------------------------------
  120. # includes und Konstanten
  121. #--------------------------------------------------------------------
  122.  
  123. //Konstante für die maximale Größe eines Flatfiles
  124. define ('FLAT_MAXFILESIZE', 1000000);
  125.  
  126. //Drei Konstanten für das Error Reporting
  127. //nur dann definieren, sofern diese nicht schon vorher durch den
  128. //Anwender definiert wurden
  129. if(!defined('PRINT_NOTICES'))
  130. {
  131.   define('PRINT_NOTICES', true);
  132. }
  133. if(!defined('PRINT_WARNINGS'))
  134. {
  135.   define('PRINT_WARNINGS', true);
  136. }
  137. if(!defined('PRINT_FAILES'))
  138. {
  139.   define('PRINT_FAILES', true);
  140. }
  141.  
  142.  
  143. #--------------------------------------------------------------------
  144. # Dauerfunktionen
  145. #--------------------------------------------------------------------
  146. function get_error_description($errnr, $returndescr = false)
  147. {
  148.   //Notiz-Meldungen, 0 und 100+
  149.   $_notices = array(
  150.          0 => "No errors, function was successfully carried out."
  151.     );
  152.   //Warn-Meldungen, 1 bis 49
  153.   $_warnings = array(
  154.          2 => "Low-Level Error: Flat Box wasn't able to find the selected file.",
  155.          3 => "Low-Level Error: Selected file already exists.",
  156.          4 => "Low-Level Error: There are no data records, selected file is empty.",
  157.          5 => "Low-Level Error: Authorisation Error on low-level section.",
  158.          8 => "Low-Level Error: Flat Box wasn't able to write in the file.",
  159.          9 => "Low-Level Error: Inserting into this file is not possible becaus filetype is not flatfile.",
  160.         10 => "Low-Level Error: Maximum allowable filesize is transgressed.",
  161.         11 => "Data Error: File format doesn't match.",
  162.         12 => "Data Error: Still erroneous data records in ['denied'].",
  163.         13 => "Data Error: There are still some data records that couldn't be worked up.",
  164.         14 => "Data Error: There are no data records, but the file format is OK."
  165.     );
  166.   //Fehler-Meldungen in der Userverwaltung, 50 bis 99
  167.   $_failes = array(
  168.         50 => "Authorisation Error, no further information avaliable."
  169.     );
  170.  
  171.   //Wenn keine Error Nummer übergeben wurde, abbrechen
  172.   if(!is_numeric($errnr)) return false;
  173.   //Prüfen, ob es sich um eine existierende Notice-Meldung handelt
  174.   elseif($errnr == 0 OR $errnr >= 100 AND isset($_notices[$errnr]))
  175.   {
  176.     $message = $_notices[$errnr];
  177.     //Wenn entsprechend definiert, Meldung ausgeben
  178.     if(defined('PRINT_NOTICES') AND PRINT_NOTICES)
  179.     {
  180.       echo "<b>Notice:</b> " . $message . "<br /><br />\n";
  181.     }
  182.   }
  183.   //Prüfen, ob es sich um eine existierende Warning-Meldung handelt
  184.   elseif($errnr >= 1 AND $errnr <= 49 AND isset($_warnings[$errnr]))
  185.   {
  186.     $message = $_warnings[$errnr];
  187.     //Wenn entsprechend definiert, Meldung ausgeben
  188.     if(defined('PRINT_WARNINGS') AND PRINT_WARNINGS)
  189.     {
  190.       echo "<b>Warning:</b> " . $message . "<br /><br />\n";
  191.     }
  192.   }
  193.   //Prüfen, ob es sich um eine existierende Fehler-Meldung handelt
  194.   elseif($errnr >= 50 AND $errnr <= 99 AND isset($_failes[$errnr]))
  195.   {
  196.     $message = $_failes[$errnr];
  197.     //Wenn entsprechend definiert, Meldung ausgeben
  198.     if(defined('PRINT_WARNINGS') AND PRINT_WARNINGS)
  199.     {
  200.       echo "<b>Warning:</b> " . $message . "<br /><br />\n";
  201.     }
  202.   }
  203.   //Ansonsten ist der Errorcode unbekannt
  204.   else
  205.   {
  206.     $message = "An unknown error occured, please refer to Thomas Schmieder or "
  207.              . "Dennis Riehle to get more information about error " . $errnr;
  208.     echo "<b>Fatal Error:</b> " . $message . "<br /><br />\n";
  209.   }
  210.   if($returndescr)
  211.   {
  212.     return $message;
  213.   }
  214.   else
  215.   {
  216.     return $errnr;
  217.   }
  218. }
  219.  
  220. #--------------------------------------------------------------------
  221. function get_microtime()
  222. {
  223.   //Wir eine PHP Version kleiner 5 verwendet?
  224.   if(version_compare(phpversion(), "5", "<"))
  225.   {
  226.     //Dann müssen wir uns die Zahl selber zusammenstellen
  227.     list($usec, $sec) = explode(" ",microtime());
  228.     $microtime = (float)$usec + (float)$sec;
  229.   }
  230.   else
  231.   {
  232.     //PHP5 kennt einen opt. Parameter für microtime(),
  233.     //der das bereits alles erledigt
  234.     $microtime = microtime(true);
  235.   }
  236.   return $microtime;
  237. }
  238.  
  239. #--------------------------------------------------------------------
  240. function get_time_s()
  241. {
  242.   list($usec, $sec) = explode(" ",microtime());
  243.   $time_s = date("YmdHis").substr($usec,1,7);
  244.  
  245.   return $time_s;
  246. }
  247.  
  248. #--------------------------------------------------------------------
  249. function strip($data)       
  250. {
  251.   if (!get_magic_quotes_gpc())
  252.   {
  253.     return $data;
  254.   }
  255.  
  256.   if (is_array($data))
  257.   {
  258.     foreach($data as $key => $val)
  259.     {
  260.       $data[$key] = strip($val);
  261.     }
  262.   }
  263.   else
  264.   {
  265.     $data = stripslashes($data);
  266.   } 
  267.  
  268.   return $data;
  269. }
  270.  
  271. #--------------------------------------------------------------------
  272. function flat_open_lock($filepath, $lockmode)
  273. { 
  274.   # Lockdatei öffnen oder anlegen
  275.   for ($x=0;$x<5;$x++)
  276.   {
  277.     if($lh = @fopen($filepath,"a+")) break;
  278.     usleep(8000)## 8ms warten bis zum nächsten Versuch
  279.   }
  280.  
  281.   if (!$lh) return false
  282.  
  283.   # Lockversuch
  284.   for ($x=0;$x<5;$x++)
  285.   {
  286.     if (@flock($lh,$lockmode + LOCK_NB)) return $lh;
  287.     usleep(8000)## 8ms warten bis zum nächsten Versuch
  288.   }
  289.  
  290.   fclose($lh);
  291.   return false;
  292. }
  293.  
  294. #--------------------------------------------------------------------
  295. function flat_array_read($fp)
  296. {
  297.   fseek($fp,0,SEEK_SET);
  298.   $_file_packed = fread($fp,$filesize);
  299.   if($_file_packed)
  300.   {
  301.     $_file = unserialize($_file_packed);
  302.     return $_file;
  303.   }
  304.   else
  305.   {
  306.     return false;
  307.   }
  308. }
  309.  
  310. #--------------------------------------------------------------------
  311. function flat_array_write($fp, $array)
  312. {
  313.   $_file_packed = serialize($array);
  314.   fseek($fp,0);
  315.   ftruncate($fp, 0);
  316.   $writeok = fwrite($fp,$_file_packed,strlen($_file_packed));
  317.   if($writeok)
  318.   {
  319.     return true;
  320.   }
  321.   else
  322.   {
  323.     return false;
  324.   }
  325. }
  326.  
  327.  
  328. #--------------------------------------------------------------------
  329. # Einmalige Funktionen
  330. #--------------------------------------------------------------------
  331. function flat_file_create($filepath)     
  332. {
  333.  clearstatcache();                     ## Statusbuffer rücksetzen
  334.  
  335.  if(file_exists($filepath)) return get_error_description(3)## Datei existiert schon
  336.  
  337.  $fp = flat_open_lock($filepath,LOCK_EX);
  338.  
  339.  if($fp)
  340.  {                                     ## wenn File > 0 war es schon da
  341.    if (filesize($filepath) > 0)        ## man muss das hier nochmal bzw
  342.                                        ## eigentlich erst hier testen,
  343.    {                                   ## weil zwischen Handle-Beschaffung
  344.                                        ## und Lock Zeit vergeht
  345.      fclose($fp);
  346.      return get_error_description(3)## Datei existiert schon
  347.    }
  348.    $time_s = get_time_s();
  349.    $time_u = time();
  350.    
  351.    $_file         = array();
  352.    $_file['meta'] = array();
  353.    $_file['data'] = array();
  354.    
  355.    $_file['meta']['created']    = $time_u;      ## erstellt am
  356.    $_file['meta']['lastupdate'] = $time_s;      ## letztes Write   
  357.    $_file['meta']['lastid']     = 0;
  358.    $_file['meta']['amount']     = 0;
  359.    $_file['meta']['filetype']   = "flatfile";
  360.    
  361.    $_file_packed = serialize($_file);
  362.    fseek($fp,0);
  363.    fwrite($fp,$_file_packed,strlen($_file_packed));
  364.    fclose($fp);
  365.    
  366.    return get_error_description(0);    ##Code für kein Fehler
  367.  }
  368.  else return get_error_description(5); ##Code für Datei nicht geöffnet
  369. }
  370.  
  371. #--------------------------------------------------------------------
  372. function flat_file_alter($filepath, $action, $fieldname, $value = "", $overwrite = false)
  373. {
  374.   //status-Buffer rücksetzen
  375.   clearstatcache();
  376.  
  377.   //Datei öffnen und locken, bei Fehler abrechen
  378.   $fp = flat_open_lock($filepath,LOCK_EX)
  379.  
  380.   if (!$fp) return get_error_description(5); ## Datei konnte nicht gesperrt werden
  381.  
  382.   //Zeitstempel erzeugen und merken
  383.   $time_s = get_time_s();
  384.   $time_u = time();
  385.  
  386.   //Dateigröße feststellen
  387.   $filesize = filesize($filepath);
  388.   //maximale Dateigröße prüfen
  389.   if($filesize > FLAT_MAXFILESIZE + 5000)
  390.   {
  391.     fclose($fp);
  392.     return get_error_description(10)## max. zulässige Dateigröße überschritten
  393.   }
  394.   //ist in der Datei überhaupt etwas drin?
  395.   elseif($filesize == 0)
  396.   {
  397.     fclose($fp);
  398.     return get_error_description(4);   ## File ist leer
  399.   }
  400.  
  401.   //Datei entpacken
  402.   fseek($fp,0,SEEK_SET);
  403.   $_file_packed = fread($fp,$filesize);
  404.   $_file = unserialize($_file_packed);
  405.  
  406.   //abbrechen, falls $_file leer ist
  407.   if(empty($_file))
  408.   {
  409.     return get_error_description(4);
  410.   }
  411.   //Dateiformat prüfen
  412.   elseif(!isset($_file['meta']['created']) or
  413.         !isset($_file['meta']['lastupdate']) or
  414.         !isset($_file['meta']['lastid']) or
  415.         !isset($_file['meta']['amount']) or
  416.         !is_array($_file['data']))
  417.   {
  418.     return get_error_description(11);      ## Dateiformat passt nicht
  419.   }
  420.   //Alle Datensätze bearbeiten
  421.   foreach($_file['data'] as $key => $_record)
  422.   {
  423.     if($action == "remove" and isset($_record[$fieldname]))
  424.     {
  425.       unset($_file['data'][$key][$fieldname]);
  426.       $_file['data'][$key]['lastupdate'] = $time_s;
  427.     }
  428.     elseif($action == "add")
  429.     {
  430.       if(!isset($_record[$fieldname]) or $overwrite)
  431.       {
  432.         $_file['data'][$key][$fieldname] = $value;
  433.         $_file['data'][$key]['lastupdate'] = $time_s;
  434.       }
  435.     }
  436.   }
  437.  
  438.   //letzte Veränderung eintragen
  439.   $_file['meta']['lastupdate'] = $time_s;
  440.  
  441.   //Datei verpacken
  442.   $_file_packed = serialize($_file);
  443.      
  444.   //und abspeichern
  445.   fseek($fp,0);
  446.   ftruncate($fp,0);
  447.   $writeok = @fwrite($fp,$_file_packed,strlen($_file_packed));
  448.  
  449.   @fclose($fp);
  450.      
  451.   //Rückgabewert der Funktion
  452.   if (!$writeok) return get_error_description(8); # Fehler beim Schreiben;
  453.  
  454.   return get_error_description(0);       ## Kein Fehler aufgetreten
  455. }
  456.  
  457.  
  458. #--------------------------------------------------------------------
  459. # Grundfunktionen (BIOS)
  460. #--------------------------------------------------------------------
  461. function flat_rec_insert($filepath, &$_recdata)
  462. {
  463.   //status-Buffer rücksetzen
  464.   clearstatcache();
  465.  
  466.   //Datei öffnen und locken, bei Fehler abrechen
  467.   $fp = flat_open_lock($filepath,LOCK_EX);
  468.   if (!$fp) return get_error_description(5); ## Datei konnte nicht gesperrt werden
  469.  
  470.   // maximale Dateigröße prüfen
  471.   $filesize = filesize($filepath);
  472.   if ($filesize > FLAT_MAXFILESIZE)
  473.   {
  474.     fclose($fp);
  475.     return get_error_description(10)## max. zulässige Dateigröße überschritten
  476.   }
  477.  
  478.   //Wenn Daten vorhanden, diese entpacken
  479.   if($filesize > 0)
  480.   {
  481.     fseek($fp,0,SEEK_SET);
  482.     $_file_packed = fread($fp,$filesize);
  483.     $_file = unserialize($_file_packed);
  484.   }
  485.   else
  486.   {
  487.     $_file = array();
  488.   }
  489.  
  490.   //Zeitstempel erzeugen und merken
  491.   $time_s = get_time_s();
  492.   $time_u = time();
  493.  
  494.   //$_file anlegen, falls nicht vorhanden
  495.   if(empty($_file))
  496.   {
  497.     $_file = array();
  498.     $_file['meta'] = array();
  499.     $_file['data'] = array();
  500.  
  501.     $_file['meta']['created'] = $time_u;
  502.     $_file['meta']['lastupdate'] = $time_s;       
  503.     $_file['meta']['lastid'] = 0;
  504.     $_file['meta']['amount'] = 0;
  505.     $_file['meta']['filetype'] = "flatfile";
  506.   }
  507.   else
  508.   {
  509.     //Dateiformat überprüfen
  510.     if (!isset($_file['meta']['created']) or
  511.         !isset($_file['meta']['lastupdate']) or
  512.         !isset($_file['meta']['lastid']) or
  513.         !isset($_file['meta']['amount']) or
  514.         !is_array($_file['data']))
  515.     {
  516.       fclose($fp);
  517.       return get_error_description(11)## Dateiformat passt nicht
  518.     }
  519.  
  520.     if (isset($_file['meta']['filetype']) AND     ## isset, wegen Abwärtskompatiblität
  521.         $_file['meta']['filetype'] != "flatfile")
  522.     {
  523.       return get_error_description(9);   ## Ist kein Flatfile, möglicherweise ein
  524.                                          ## Archiv File
  525.     }
  526.     elseif (!isset($_file['meta']['filetype']))   ## existierte keine Angabe flatfile
  527.     {
  528.       $_file['meta']['filetype'] = "flatfile";    ## so wird diese angelegt
  529.     }
  530.    
  531.     if (!empty($_recdata['denied']) or !empty($_recdata['meta']))
  532.     {
  533.       fclose($fp);                       ## noch fehlerhafte Datensätze im Array
  534.       return get_error_description(12)## oder noch Ergebnisdaten vorhanden
  535.     }
  536.   }
  537.  
  538.   $_recdata['meta']                 = array(); ## es könnten ja noch leere Strings sein
  539.   $_recdata['meta']['rec_inserted'] = 0;       ## Anzahl der fehlerfrei updated Records
  540.   $_recdata['meta']['rec_denied']   = 0;       ## Anzahl der abgelehnten Records
  541.   $_recdata['denied']               = array(); ## Array f. abgelehnte Datensätze anlegen
  542.   $_recdata['rec_inserted']         = array(); ## Array f. eingefügte Datensätze anlegen
  543.  
  544.   foreach($_recdata['data'] as $key => $_record)
  545.   {
  546.     if(!empty($_record))
  547.     {
  548.       $_recdata['meta']['rec_inserted'] ++; ## fehlerfrei eingefügten DS zählen
  549.       $_file['meta']['lastid'] ++;
  550.       $_file['meta']['amount'] ++;
  551.    
  552.       $new_key = $_file['meta']['lastid'];
  553.    
  554.       $_file['data'][$new_key] = $_record;   ## Daten übertragen
  555.       $_file['data'][$new_key]['lastupdate'] = $time_s; ## Aktualisierungsdatum eintragen
  556.       $_file['data'][$new_key]['created']    = $time_u## Erstelldatum eintragen
  557.       unset($_recdata['data'][$key]);        ## Record aus Auftragsliste löschen
  558.    
  559.       $_recdata['rec_inserted'][$key]['new_id'] = $new_key; ## Erteilter Schlüssel
  560.     }
  561.     else
  562.     {
  563.       $_recdata['denied'][$key] = $_record## abgelehnter Datensatz
  564.       $_recdata['meta']['rec_denied'] ++;    ## "abgelehnt" zählen
  565.     }
  566.   }
  567.  
  568.   // wenn Datensätze eingefügt wurden
  569.   if ($_recdata['meta']['rec_inserted'] > 0)
  570.   {
  571.     // letzte Veränderung eintragen
  572.     $_file['meta']['lastupdate'] = $time_s;
  573.  
  574.     //Datei verpacken
  575.     $_file_packed = serialize($_file);
  576.        
  577.     //und abspeichern
  578.     fseek($fp,0);
  579.     ftruncate($fp,0);
  580.     $writeok = @fwrite($fp,$_file_packed,strlen($_file_packed));
  581.   }   
  582.  
  583.   @fclose($fp);
  584.  
  585.   //Rückgabewert der Funktion
  586.   if (!$writeok)
  587.   {
  588.     return get_error_description(8);     # Fehler beim Schreiben der Daten;
  589.   } 
  590.  
  591.   if (count($_recdata['denied'])==0)
  592.   {
  593.     return get_error_description(0);     # kein Fehler aufgetreten, alle Sätze verarbeitet.
  594.   }
  595.   else
  596.   {
  597.     return get_error_description(13);      # nicht alle Sätze konnten verarbeitet werden
  598.   }
  599. }
  600.  
  601. #--------------------------------------------------------------------
  602. function flat_rec_select($filepath, &$_recdata, $_userdata = false, $_rights = false)
  603. {
  604.   //status-Buffer rücksetzen
  605.   clearstatcache();
  606.  
  607.   //Datei öffnen und locken, bei Fehler abrechen
  608.   $fp = flat_open_lock($filepath,LOCK_SH)
  609.  
  610.   if (!$fp) return get_error_description(5); ## Datei konnte nicht gesperrt werden
  611.  
  612.   //Dateigröße feststellen
  613.   $filesize = filesize($filepath);
  614.   //maximale Dateigröße prüfen
  615.   if($filesize > FLAT_MAXFILESIZE + 5000)
  616.   {
  617.     fclose($fp);
  618.     return get_error_description(10)## max. zulässige Dateigröße überschritten
  619.   }
  620.   //ist in der Datei überhaupt etwas drin?
  621.   elseif($filesize == 0)
  622.   {
  623.     fclose($fp);
  624.     return get_error_description(4);   ## File ist leer
  625.                                        ## müssen wir hier schon abbrechen, weil sonst
  626.                                        ## fread und unserialize Fehler melden
  627.   }
  628.   //Datei entpacken
  629.   else
  630.   {
  631.     fseek($fp,0,SEEK_SET);
  632.     $_file_packed = fread($fp,$filesize);
  633.     fclose($fp);       
  634.     $_file = unserialize($_file_packed);
  635.   }
  636.  
  637.   //abbrechen, falls nur ein leeres Array im File sein sollte
  638.   if(empty($_file))
  639.   {
  640.     return get_error_description(4);
  641.   }
  642.   else
  643.   {
  644.     //Dateiformat überprüfen
  645.     if (!isset($_file['meta']['created']) or
  646.         !isset($_file['meta']['lastupdate']) or
  647.         !isset($_file['meta']['lastid']) or
  648.         !isset($_file['meta']['amount']) or
  649.         !is_array($_file['data']))
  650.     {
  651.       return get_error_description(11);      ## Dateiformat passt nicht
  652.     }
  653.  
  654.      
  655.     $_recdata = array();
  656.     $_recdata['meta'] = $_file['meta'];      ## Metadaten übertragen
  657.     $_recdata['meta']['rec_denied']    = 0## Anzahl der verbotenen Records
  658.     $_recdata['meta']['rec_selected']  = 0## Anzahl der gelieferten Records
  659.  
  660.  
  661.     foreach($_file['data'] as $key => $_record)
  662.     {
  663.       if(isset($_record['rights']) and (false))          ## Einschränkende rechte vorhanden
  664.       {
  665.         $_recdata['meta']['rec_denied'] ++;              ## mangelnde Userrechte
  666.       }
  667.       else
  668.       {
  669.         $_recdata['meta']['rec_selected'] ++;            ## erlaubter Datensatz
  670.         $_recdata['data'][$key] = $_record;              ## Daten übertragen
  671.       }
  672.     }
  673.     ksort($_recdata['data']);                            ## nach IDs sortieren
  674.   }
  675.  
  676.   //Rückgabewert der Funktion
  677.   if ($_recdata['meta']['rec_denied'] == 0)              ## alle Sätze erlaubt
  678.   {
  679.     return get_error_description(0);       # kein Fehler aufgetreten, alle Sätze verarbeitet.
  680.   }
  681.   else
  682.   {
  683.     return get_error_description(13);      # nicht alle Sätze konnten verarbeitet werden
  684.   }
  685. }
  686.  
  687. #--------------------------------------------------------------------
  688. function flat_rec_update($filepath, &$_recdata)
  689. {
  690.   //status-Buffer rücksetzen
  691.   clearstatcache();
  692.  
  693.   //Datei öffnen und locken, bei Fehler abrechen
  694.   $fp = flat_open_lock($filepath,LOCK_EX);
  695.   if (!$fp) return get_error_description(5); ## Datei konnte nicht gesperrt werden
  696.  
  697.   //Dateigröße feststellen
  698.   $filesize = filesize($filepath);
  699.   //maximale Dateigröße prüfen
  700.   if($filesize > FLAT_MAXFILESIZE + 5000)
  701.   {
  702.     fclose($fp);
  703.     return get_error_description(10)## max. zulässige Dateigröße überschritten
  704.   }
  705.   //ist in der Datei überhaupt etwas drin?
  706.   elseif($filesize == 0)
  707.   {
  708.     fclose($fp);
  709.     return get_error_description(4);   ## File ist leer
  710.   }
  711.   //Daten entpacken
  712.   else
  713.   {
  714.     fseek($fp,0,SEEK_SET);
  715.     $_file_packed = fread($fp,$filesize);
  716.     $_file = unserialize($_file_packed);
  717.   }
  718.  
  719.   //Zeitstempel erzeugen und merken
  720.   $time_s = get_time_s();
  721.   $time_u = time();
  722.  
  723.   //abbrechen, falls nur ein leeres Array im File sein sollte
  724.   if(empty($_file))
  725.   {
  726.     return get_error_description(4);
  727.   }
  728.   else
  729.   {
  730.     //Dateiformat überprüfen
  731.     if (!isset($_file['meta']['created']) or
  732.         !isset($_file['meta']['lastupdate']) or
  733.         !isset($_file['meta']['lastid']) or
  734.         !isset($_file['meta']['amount']) or
  735.         !is_array($_file['data']))
  736.     {
  737.       fclose($fp);
  738.       return get_error_description(11);           ## Dateiformat passt nicht
  739.     }
  740.  
  741.     if (!empty($_recdata['denied']) or !empty($_recdata['meta']))
  742.     {
  743.       fclose($fp);                       ## noch fehlerhafte Datensätze im Array
  744.       return get_error_description(12)## oder noch Ergebnisdaten vorhanden
  745.     }
  746.   }
  747.  
  748.   $_recdata['denied'] = array();
  749.   $_recdata['meta']['rec_updated'] = 0## Anzahl der fehlerfrei updated Records
  750.   $_recdata['meta']['rec_denied']  = 0## Anzahl der abgelehnten Records
  751.  
  752.   foreach($_recdata['data'] as $key => $_record)
  753.   {
  754.     if(isset($_file['data'][$key]))      ## Datensatz ist vorhanden
  755.     {
  756.       if ($_file['data'][$key]['lastupdate'] == $_record['lastupdate'])
  757.       {
  758.         //Ein Manipulieren von [created] soll nicht möglich sein
  759.         unset($_recdata['data']['created']);
  760.         //Datensatz einfügen
  761.         $_recdata['meta']['rec_updated'] ++;           ## fehlerfrei updated zählen
  762.         $_file['data'][$key] = $_record;               ## Daten übertragen
  763.         $_file['data'][$key]['lastupdate'] = $time_s## Aktualisierungsdatum eintragen
  764.         unset($_recdata['data'][$key]);                ## Record aus Auftragsliste löschen
  765.       }
  766.       else
  767.       {
  768.         $_recdata['denied'][$key] = $_file['data'][$key]; ## Daten aus dem File holen
  769.         $_recdata['meta']['rec_denied'] ++;               ## "abgelehnt" zählen
  770.       }
  771.     }
  772.     else  ## Datensatz aus der Auftragsliste ist nicht im File
  773.     {
  774.       $_recdata['meta']['rec_denied'] ++;    ## "abgelehnt" hochzählen
  775.       $_recdata['denied'][$key] = $_record## Datensatz in [denied] kopieren
  776.     }
  777.   }
  778.  
  779.   //wenn Datensätze verändert wurden
  780.   if ($_recdata['meta']['rec_updated'] > 0)
  781.   {
  782.     // letzte Veränderung eintragen
  783.     $_file['meta']['lastupdate'] = $time_s;
  784.  
  785.     //Datei verpacken
  786.     $_file_packed = serialize($_file);
  787.      
  788.     //und abspeichern
  789.     fseek($fp,0);
  790.     ftruncate($fp,0);
  791.     $writeok = @fwrite($fp,$_file_packed,strlen($_file_packed));
  792.   } 
  793.    
  794.   @fclose($fp);
  795.      
  796.   //Rückgabewert der Funktion
  797.   if (!$writeok) return get_error_description(8); # Fehler beim Schreiben;
  798.  
  799.   if (count($_recdata['denied']) == 0)
  800.   {
  801.     return get_error_description(0);    ## kein Fehler aufgetreten, alle Sätze verarbeitet.
  802.   }
  803.   else
  804.   {
  805.     return get_error_description(13);   ## nicht alle Sätze konnten verarbeitet werden
  806.   }
  807. }
  808.  
  809. #--------------------------------------------------------------------
  810. function flat_rec_delete($filepath, &$_recdata)
  811. {
  812.   //status-Buffer rücksetzen
  813.   clearstatcache();
  814.  
  815.   //Datei öffnen und locken, bei Fehler abrechen
  816.   $fp = flat_open_lock($filepath,LOCK_EX);
  817.   if (!$fp) return get_error_description(5); ## Datei konnte nicht gesperrt werden
  818.  
  819.   //Dateigröße feststellen
  820.   $filesize = filesize($filepath);
  821.   //maximale Dateigröße prüfen
  822.   if($filesize > FLAT_MAXFILESIZE + 5000)
  823.   {
  824.     fclose($fp);
  825.     return get_error_description(10)## max. zulässige Dateigröße überschritten
  826.   }
  827.   //ist in der Datei überhaupt etwas drin?
  828.   elseif($filesize == 0)
  829.   {
  830.     fclose($fp);
  831.     return get_error_description(4);   ## File ist leer
  832.   }
  833.   //Daten entpacken
  834.   else
  835.   {
  836.     fseek($fp,0,SEEK_SET);
  837.     $_file_packed = fread($fp,$filesize);
  838.     $_file = unserialize($_file_packed);
  839.   }
  840.  
  841.   //Zeitstempel erzeugen.
  842.   $time_s = get_time_s();
  843.  
  844.   //Prüfen, ob $_file Daten enthält
  845.   if(empty($_file))
  846.   {
  847.     return get_error_description(4);              ## Keine Daten vorhanden
  848.   }
  849.   else
  850.   {
  851.     //Dateiformat überprüfen
  852.     if (!isset($_file['meta']['created']) or
  853.         !isset($_file['meta']['lastupdate']) or
  854.         !isset($_file['meta']['lastid']) or
  855.         !isset($_file['meta']['amount']) or
  856.         !is_array($_file['data']))
  857.     {
  858.       fclose($fp);
  859.       return get_error_description(11);           ## Dateiformat passt nicht
  860.     }
  861.  
  862.     if (!empty($_recdata['denied']) or !empty($_recdata['meta']))
  863.     {
  864.       fclose($fp);
  865.       return get_error_description(12);           ## noch fehlerhafte Datensätze im Array
  866.     }                      ## oder noch falsche Ergbnisdaten
  867.    
  868.    
  869.   }
  870.  
  871.   $_recdata['meta']   = array();
  872.   $_recdata['denied'] = array();
  873.   $_recdata['meta']['rec_deleted'] = 0## Anzahl der fehlerfrei gelöschten Records
  874.   $_recdata['meta']['rec_denied']  = 0## Anzahl der abgelehnten Records
  875.  
  876.   foreach($_recdata['data'] as $key => $_record)
  877.   {
  878.     if(isset($_file['data'][$key]))      ## Datensatz ist vorhanden
  879.     {
  880.       if ($_file['data'][$key]['lastupdate'] == $_record['lastupdate'])
  881.       {
  882.         $_recdata['meta']['rec_deleted'] ++;  ## fehlerfrei updated zählen
  883.         unset($_file['data'][$key]);          ## Daten löschen
  884.         unset($_recdata['data'][$key]);       ## Record aus Auftragsliste löschen
  885.         $_file['meta']['amount']--;           ## Satzanzahl verringern
  886.       }
  887.       else
  888.       {
  889.         $_recdata['denied'][$key] = $_file['data'][$key]; ## Daten aus dem File holen
  890.         $_recdata['meta']['rec_denied'] ++;               ## "abgelehnt" zählen
  891.       }
  892.     }
  893.     else        ## Datensatz aus der Auftragsliste ist nicht im File
  894.     {
  895.       unset($_recdata['data'][$key]);       ## Record aus Auftragsliste löschen   
  896.     }
  897.   }
  898.  
  899.   // Wenn datensätze gelöscht wurden
  900.   if ($_recdata['meta']['rec_deleted'] >0)
  901.   {
  902.     // letzte Veränderung eintragen
  903.     $_file['meta']['lastupdate'] = $time_s;
  904.  
  905.     //Datei verpacken
  906.     $_file_packed = serialize($_file);
  907.      
  908.     //und abspeichern
  909.     fseek($fp,0);
  910.     ftruncate($fp,0);
  911.     $writeok = @fwrite($fp,$_file_packed,strlen($_file_packed));
  912.   }
  913.  
  914.   @fclose($fp);
  915.      
  916.   //Rückgabewert der Funktion
  917.  
  918.   if (!$writeok) return get_error_description(8);   ## Fehler beim Schreiben;
  919.  
  920.   if (count($_recdata['denied'])==0)
  921.   {
  922.     return get_error_description(0);       # kein Fehler aufgetreten, alle Sätze gelöscht wurden.
  923.   }
  924.   else
  925.   {
  926.     return get_error_description(13);      # nicht alle Sätze konnten verarbeitet werden
  927.   }
  928. }
  929.  
  930.  
  931. #--------------------------------------------------------------------
  932. # Anzeigefunktionen
  933. #--------------------------------------------------------------------
  934. function flat_rec_get_listdata(&$_recdata, &$_showdata, $startID = false, $show = 5)
  935. {
  936.   //status-Buffer rücksetzen
  937.   clearstatcache();
  938.  
  939.   if(!$startID) $startID = $_recdata['meta']['lastid'];
  940.  
  941.   //Der Zähler für bereits rüberkopierte Datensätze auf 0 setzen
  942.   $count = 0;
  943.  
  944.   //Default Wert für nächste ID festlegen
  945.   $nextID = false;
  946.  
  947.   //Next ID ermitteln
  948.   for($ID = $startID; $ID >= 0; $ID--)
  949.   {
  950.     //Wenn der Datensatz vorhanden ist
  951.     if(isset($_recdata['data'][$ID]))
  952.     {
  953.       //und noch Datensätze bis zum Soll fehlen
  954.       if($count < $show)
  955.       {
  956.         //Dann kopiere diesen Datensatz rüber
  957.         $_showdata['data'][$ID] = $_recdata['data'][$ID];
  958.         $count++;
  959.       }
  960.       //und das Soll errreicht ist
  961.       else
  962.       {
  963.         //Diese ID als nächste ID festhalten
  964.         $nextID = $ID;
  965.         //Und abbrechen
  966.         break;
  967.       }
  968.     }
  969.     //Wenn der Datensatz nicht vorhanden ist,
  970.     //einfach weitermachen
  971.   }
  972.  
  973.   //Den Zähler wieder auf null setzen
  974.   $count = 0;
  975.  
  976.   //Default für lastID setzen
  977.   $lastID = false;
  978.  
  979.   //LastID ermitteln:
  980.   for($ID = $startID; $ID <= $_recdata['meta']['lastid']; $ID++)
  981.   {
  982.     //Wenn der Datensatz vorhanden ist
  983.     if(isset($_recdata['data'][$ID]))
  984.     {
  985.       if($count < $show)
  986.       {
  987.         $count++;
  988.       }
  989.       else
  990.       {
  991.         $lastID = $ID;
  992.         break;
  993.        }
  994.     }
  995.     //Wenn der Datensatz nicht vorhanden ist,
  996.     //einfach weitermachen
  997.   }
  998.   //Wenn die lastID noch nicht herrausgefunden wurde
  999.   if($lastID === false AND $startID != $_recdata['meta']['lastid'])
  1000.   {
  1001.     //lastID auf die höchste ID setzen
  1002.     $lastID = $_recdata['meta']['lastid'];
  1003.   }
  1004.  
  1005.   //NextID, LastID und StartID in meta schreiben
  1006.   $_showdata['meta']['nextID']  = $nextID;
  1007.   $_showdata['meta']['lastID']  = $lastID;
  1008.   $_showdata['meta']['startID'] = $startID;
  1009.  
  1010.   //Rückgabewert feststellen
  1011.   if(empty($_showdata)) return get_error_description(4); //Keine Daten vorhanden
  1012.   else                  return get_error_description(0); //Alles OK ;-)
  1013. }
  1014.  
  1015. #--------------------------------------------------------------------
  1016. function flat_rec_make_list(&$_showdata)
  1017. {
  1018.   //status-Buffer rücksetzen
  1019.   clearstatcache();
  1020.  
  1021.   echo "<h2>Übersicht aller ausgewählten Records</h2>\n\n";
  1022.   foreach($_showdata['data'] as $id => $_record)
  1023.   {
  1024.     echo "<div class=\"entry\">\n";
  1025.     echo "Eintrags ID: $id<br>\n";
  1026.     echo "<a class=\"detailslink\" href=\"" . $_SERVER['PHP_SELF'] . "?detailID=" . $id . "&amp;backID=";
  1027.     echo intval($_showdata['meta']['startID']) . "\">Details ansehen</a><br>\n";
  1028.     echo "</div>\n\n";
  1029.   }
  1030.  
  1031.   if($_showdata['meta']['lastID'] !== false)
  1032.   {
  1033.     echo "<a id=\"beforelink\" href=\"" . $_SERVER['PHP_SELF'] . "?startID=" . $_showdata['meta']['lastID'];
  1034.     echo "\">Vorherige Einträge</a>\n";
  1035.   }
  1036.   if($_showdata['meta']['nextID'] !== false)
  1037.   {
  1038.     echo "<a id=\"nextlink\" href=\"" . $_SERVER['PHP_SELF'] . "?startID=" . $_showdata['meta']['nextID'];
  1039.     echo "\">Weitere Einträge</a>\n";
  1040.   }
  1041. }
  1042.  
  1043. #--------------------------------------------------------------------
  1044. function flat_rec_make_detail(&$_recdata, $dataID, $backStartID = false)
  1045. {
  1046.   //status-Buffer rücksetzen
  1047.   clearstatcache();
  1048.  
  1049.   echo "<h3>Detailansicht eines Records</h3>\n";
  1050.   echo "<div class=\"detailentry\">\n";
  1051.   echo "<table cellpadding=2 cellspacing=2>\n";
  1052.   foreach($_recdata['data'][$dataID] as $key => $value)
  1053.   {
  1054.     echo "<tr>\n";
  1055.     echo "<td>" . $key . ":</td>\n";
  1056.     echo "<td>" . $value . "</td>\n";
  1057.     echo "</tr>\n";
  1058.   }
  1059.   echo "</table>\n";
  1060.   echo "</div>\n\n";
  1061.  
  1062.   //Wenn eine Zurück ID angegeben wurde, diese ausgeben
  1063.   if($backStartID)
  1064.   {
  1065.     echo "<a id=\"backlink\" href=\"" . $_SERVER['PHP_SELF'] . "?startID=";
  1066.     echo $backStartID . "\">Zurück</a>\n";
  1067.   }
  1068. }
  1069.  
  1070. #--------------------------------------------------------------------
  1071. function flat_rec_search(&$_recdata, $term, $searchin = "value", $searchtype = "simple")
  1072. {
  1073.   //Dateiformat überprüfen
  1074.   if (!is_array($_recdata) or
  1075.       !is_array($_recdata['data']))
  1076.   {
  1077.     return get_error_description(11);    ## Dateiformat passt nicht
  1078.   }
  1079.   //Überhaupt Datensätze vorhanden?
  1080.   if (empty($_recdata))
  1081.   {
  1082.     return get_error_description(14);    ## Format ok, aber keine Datensätze
  1083.   }
  1084.   //Soll in den Schlüsseln gesucht werden?
  1085.   if($searchin == "key")
  1086.   {
  1087.     //Alle Datensätze durchgehen
  1088.     foreach($_recdata['data'] as $id => $_record)
  1089.     {
  1090.       //Schalter, ob etwas gefunden wurde
  1091.       $found = false;
  1092.       //Alle Datensätze durchgehen
  1093.       foreach($_record as $key => $value)
  1094.       {
  1095.         //Aufwendige Suche?
  1096.         if($searchtype == "preg")
  1097.         {
  1098.           //Wenn was gefunden, Schalter auf true setzen
  1099.           if(preg_match($term, $key)) $found = true;
  1100.         }
  1101.         //Sonst einfache Suche
  1102.         else
  1103.         {
  1104.           //Wenn was gefunden, Schalter auf true setzen
  1105.           if($key == $term) $found = true;
  1106.         }
  1107.       }
  1108.       //Wenn nichts gefunden wurde, Datensatz entfernen
  1109.       if($found == false)
  1110.       {
  1111.         unset($_recdata['data'][$id]);
  1112.       }
  1113.     }
  1114.   }
  1115.   //Ansonsten suchen wir in den Werten
  1116.   else //$searchin == "value"
  1117.   {
  1118.     //Alle Datensätze durchgehen
  1119.     foreach($_recdata['data'] as $id => $_record)
  1120.     {
  1121.       //Schalter, ob etwas gefunden wurde
  1122.       $found = false;
  1123.       //Alle Datensätze durchgehen
  1124.       foreach($_record as $key => $value)
  1125.       {
  1126.         //Handelt es sich um ein Unter-Array?
  1127.         //Das können wir bis jetzt noch nicht durchsuchen
  1128.         if(is_array($value)) continue;
  1129.         //Aufwendige Suche?
  1130.         if($searchtype == "preg")
  1131.         {
  1132.           //Wenn was gefunden, Schalter auf true setzen
  1133.           if(preg_match($term, $value)) $found = true;
  1134.         }
  1135.         else
  1136.         {
  1137.           //Wenn was gefunden, Schalter auf true setzen
  1138.           if($value == $term) $found = true;
  1139.         }
  1140.       }
  1141.       //Wenn nichts gefunden wurde, Datensatz entfernen
  1142.       if($found == false)
  1143.       {
  1144.         unset($_recdata['data'][$id]);
  1145.       }
  1146.     }
  1147.   }
  1148.   return get_error_description(0)## Kein Fehler aufgetreten
  1149. }
  1150.  
  1151. #--------------------------------------------------------------------
  1152. function flat_rec_filter(&$_recdata, $startID, $stopID = false)
  1153. {
  1154.   //Dateiformat überprüfen
  1155.   if (!is_array($_recdata) or
  1156.       !is_array($_recdata['data']))
  1157.   {
  1158.     return get_error_description(11);    ## Dateiformat passt nicht
  1159.   }
  1160.   //Überhaupt Datensätze vorhanden?
  1161.   if (empty($_recdata))
  1162.   {
  1163.     return get_error_description(14);    ## Format ok, aber keine Datensätze
  1164.   }
  1165.   //Wenn nur ein Datensatz herrausgefiltert werden soll
  1166.   if($stopID === false)
  1167.   {
  1168.     foreach($_recdata as $key => $_record)
  1169.     {
  1170.       //Alle nicht passenden Datensätze rauslöschen
  1171.       if($key != $startID)
  1172.       {
  1173.         unset($_recdata[$key]);
  1174.       }
  1175.     }
  1176.   }
  1177.   //Wenn ein Bereich an Datensätzen herrausgefiltert werden soll
  1178.   else
  1179.   {
  1180.     foreach($_recdata as $key => $_record)
  1181.     {
  1182.       //Alle nicht in diesem Bereich liegenden Datensätze löschen
  1183.       if($key < $startID OR $key > $stopID)
  1184.       {
  1185.         unset($_recdata[$key]);
  1186.       }
  1187.     }
  1188.   }
  1189.   return get_error_description(0);    ## Keine Fehler aufgetreten
  1190. }
  1191.  
  1192.  
  1193. #--------------------------------------------------------------------
  1194. # Backup- und Archivierungsfunktionen
  1195. #--------------------------------------------------------------------
  1196. function flat_rec_copy()
  1197. {
  1198.  
  1199.  
  1200. }
  1201.  
  1202. #--------------------------------------------------------------------
  1203. function flat_file_backup($filepath, $backuppath, $compress = 0)
  1204. {
  1205.   //status-Buffer rücksetzen
  1206.   clearstatcache();
  1207.  
  1208.   //Datei öffnen und locken, bei Fehler abrechen
  1209.   $fp = flat_open_lock($filepath,LOCK_EX);
  1210.   if (!$fp) return get_error_description(5); ## Datei konnte nicht gesperrt werden
  1211.  
  1212.   $filesize = filesize($filepath);
  1213.  
  1214.   // maximal zulässige Filegröße + Sicherheit zum Öffnen
  1215.   if ($filesize > FLAT_MAXFILESIZE+5000)
  1216.   {                             
  1217.     fclose($fp);
  1218.     return get_error_description(10)## max. zulässige Dateigröße überschritten
  1219.   }
  1220.  
  1221.   //Datei einlesen
  1222.   fseek($fp,0,SEEK_SET);
  1223.   $_file_packed = fread($fp,$filesize);
  1224.  
  1225.   fclose($fp);
  1226.  
  1227.   if($backuppath===false)
  1228.   {
  1229.     $backuppath = $filepath . date(".Ymd");
  1230.   }
  1231.  
  1232.   // wahlweise Komprimierung durchführen
  1233.   $compress = intval($compress);
  1234.   if ($compress > 0 AND $compress < 10)
  1235.   {
  1236.     $backuppath .= '.cpr';
  1237.     //Haben wir eine PHP Version >= 4.2? Denn der Komprimierungsgrad als
  1238.     //zweiter Parameter für gzencode() wurde erst in PHP 4.2 eingeführt!
  1239.     if(version_compare(phpversion(), "4.2", ">="))
  1240.     {
  1241.         $_file_packed = gzencode($_file_packed,$compress)## gZIP erstellen
  1242.     }
  1243.     else
  1244.     {
  1245.         $_file_packed = gzencode($_file_packed);            ## gZIP erstellen
  1246.     }
  1247.   }
  1248.   else
  1249.   {
  1250.     $backuppath .= '.abk';
  1251.   }
  1252.    
  1253.    
  1254.   $fp = flat_open_lock($backuppath,LOCK_EX);
  1255.   if (!$fp) return get_error_description(5); ## Datei konnte nicht gesperrt werden
  1256.  
  1257.   // prüfen, ob Ausgabefile schon Daten enthielt.
  1258.   $filesize = filesize($backuppath);
  1259.   if ($filesize > 0)
  1260.   {
  1261.     fclose($fp);
  1262.     return get_error_description(3)## File existiert schon
  1263.   }
  1264.  
  1265.   fwrite($fp,$_file_packed,strlen($_file_packed));
  1266.   fclose($fp);
  1267.  
  1268.   return get_error_description(0)## Kein Fehler aufgetreten
  1269. }
  1270.  
  1271.  
  1272. ######################################################################
  1273. #/------------------------------------------------------------------\#
  1274. #|                           End of File                            |#
  1275. #\------------------------------------------------------------------/#
  1276. ######################################################################
  1277.  
  1278. ?>
  1279.  

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.