Hackerboard WikiHaboBlog

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

datenbankgestütztes,serverübergreifendes array

Diskussion: datenbankgestütztes,serverübergreifendes array im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Ich hat in einem Anflug langer weile etwas in den phpdocs rumgelesen und bin auf das ArrayAccess Interface gestoßen. Bisschen ...

Antwort
Alt 06.09.09, 17:05   #1 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 60
Standard datenbankgestütztes,serverübergreifendes array


Ich hat in einem Anflug langer weile etwas in den phpdocs rumgelesen und bin auf das ArrayAccess Interface gestoßen. Bisschen rumgelesen und dann kam mir ne praktische Idee, was man damit umsetzen kann. Eben ein datenbankgestützt array, was ich von zwei gänzlich getrennten webserver einfach ansteuern kann. damit sind geschichte wie zb ein projektübergreifendes sessionsystem schnell gebaut und umgesetzt. sicherlich wäre da noch etwas feintuning an der klasse von nöten, zb dass man mit tablelocks oder transaktionen arbeitet. auch wäre es bestimmt sinvoll, nicht für jedes set die datenbank einzeln zu penetrieren.
aber für eben mal fix geschrieben fand ich es recht praktisch und wollte das ganze mit euch teilen ;)

hier der code:

PHP-Code:
<?php

  
class WWA implements arrayaccess {

      private 
$u "";
      private 
$d "";
      private 
$p "";
      private 
$h "db.kosmos";
      private 
$c null;
      private 
$t null;
 

      private 
$query "CREATE TABLE `wwa`.`{name}` (`value` VARCHAR( 40 ) NOT NULL ,`data` BLOB NOT NULL ,UNIQUE (`value`)) ENGINE = MYISAM";

      public function 
__construct($name) {

          if (empty(
$name)) {
            die(
"no array name specified");
          }

          
$this->md5($name);
          
$query str_replace("{name}",$this->t,$this->query);

          
$this->mysql_connect($this->h,$this->u,$this->p);
          
mysql_select_db($this->d);
          
$sql "SELECT table_name FROM information_schema.tables WHERE table_schema = '".$this->d."' AND table_name = '" $this->."'";
          
$res mysql_query($sql);

          if (
mysql_num_rows($res) == 0) {
              
mysql_query($query);
          }
      }

      public function 
__destruct() {
          
mysql_close($this->c);
      }
 
      public function 
offsetExists($value) {
 
          
$value sha1($value);
          
$sql "SELECT value FROM {$this->t} WHERE value = '{$value}'";
          
$res mysql_query($sql);
          if (
mysql_error()) die(mysql_error());
          if (
mysql_num_rows($res) == 0) {
              return 
false;
          }
 
          return 
true;
      }
 
      public function 
offsetSet($value,$data) {
          
$sql "REPLACE INTO {$this->t} (`value`,`data`) VALUES ('"sha1($value) ."','"base64_encode($data) ."')";
          
mysql_query($sql);
      }
 
      public function 
offsetGet($value) {
          
$sql "SELECT data FROM {$this->t} WHERE value='"sha1($value) ."'";
          
$res mysql_query($sql);
 
          if (
mysql_num_rows($res) == 1) {
              return 
base64_decode(mysql_result($res,0,"data"));
          }
 
          return 
false;
      }
 
      public function 
offsetUnset($value) {
          
mysql_query("DELETE FROM {$this->t} WHERE `value` = '".sha1($value)."'");
      }
 
      public function 
destroy() {
          
mysql_query("DROP TABLE `{$this->t}`");
      }
  }
?>
genutzt wird das ganze dann wie folgt:
PHP-Code:
$arrayname = new WWA("arrayname");
$arrayname["value"] = "läuft";
 
echo 
$arrayname["value"];
 
// zum löschen aus der db
$arrayname->destroy(); 
man sollte in der derzeitigen fassung es allerdings vermeiden, da ne riesige schleife draufzulegen, dass man da eben 1000 einträge reinschreibt das wären dann eben auch 1000 queries, das kann man ja aber noch optimieren, wenn mans braucht ;D
für meinungen über sinn und unsinn und/oder codeverbesserungen bin ich offen ;)
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 06.09.09, 20:09   #2 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Hm ja, ist zwar vom theoretischen interessant, aber praktisch schleifst du ja dann jeden Scheiß durch die Datenbank.
Für so Projekte (mehrere unabhängige Webserver auf dem selben Projekt, konkurrierender Zugriff auf übergreifende Daten etc.) ist PHP ziemlich mies.
Da bietet sich eher ein Java Application Server mit Enterprise Beans für die Daten und gecachetem Datenbankzugriff und Servlets zum Behandeln der Requests an.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 06.09.09, 21:57   #3 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 1
Standard

Zitat:
damit sind geschichte wie zb ein projektübergreifendes sessionsystem schnell gebaut und umgesetzt.
Naja, für sowas kann man aber auch eigene PHP-Session-Handler registrieren.

Also ich würde so ein Projektübergreifendes Sessionsystem aus Sicherheitstechnischer Sicht nicht benutzen, vorallem wenn es sich auch noch über mehrere DB's erstreckt.
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » datenbankgestütztes,serverübergreifendes array
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
C++ Array Zuweisung nookstar Code Kitchen 9 30.01.08 11:55
[C++]Mehrdimensionales Array nookstar Code Kitchen 14 14.01.08 21:03
php curl array string zu array parsen b4ck (Web-) Design und webbasierte Sprachen 5 12.12.07 17:11
[PHP] von Textarea in Array Henni Code Kitchen 2 04.04.07 18:12
C int array[n] zu x int ??? NeoN Code Kitchen 11 25.04.04 20:38


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61