-
Hallo liebe Tutorianer
Ich bin zurzeit an einem kleinen Projektchen namens Downloadmanager beschäftigt. Das ganze Backend des Manager läuft wie geschmiert. Nun bin Ich bei den Feinarbeiten angelangt. Vielleicht kann man mir da helfen. Hab mir auch schon die Finger wund gegoogelt aber nix exaktes gefunden was mein Begieren befriedigen konnte.
Kurz zu meiner Infrastruktur:
Ich habe 5 Virtuelle Webserver davon ist ein Server der Master (192.168.4.222). Alle Downloads sollen --> immer <-- vom Master-Server heruntergeladen werden. falls dieser aber nicht erreichbar ist, soll er beim klick auf den Downloadlink automatischen einen Alternativserver finden (einer der 4 Slave Server). Alle 5 Server sind genau gleich gemirrort.
Master Server: 192.168.4.222 (downloads.test.org) Debian 6.0
1. Slave Server: 192.168.4.223 (test1.org) Debian 6.0
2. Slave Server: 192.168.4.224 (test2.org) Debian 6.0
3. Slave Server: 192.168.4.225 (test3.org) Debian 6.0
4. Slave Server: 192.168.4.225 (test4.org) Debian 6.0
Also nochmals ein bisschen detaillierter:
Wenn ein User die Download Seite besucht und etwas herunterladen will, soll PHP automatisch checken, ob der Master-Downloadserver erreichbahr ist, falls dieser nicht verfügbahr ist, soll PHP automatisch den nächstmöglichen Slave-Server ausfindig machen.
Die IP-Adressen sind in einer separaten MySQL Tabelle aufgeführt:
--> tbl_serverprio
Spalten: server_prio (PRIMARY KEY), server_address (VARCHAR), server_comment (TEXT)
Der user soll nix vom Linkcheck mitbekommen nur falls keiner der Server erreichbahr ist soll er auf eine Error-Seite verweisen.
In diesen bestehenden Quellcode müsste der Linkchecker eingebaut werden:
PHP-Code:<html>
<body>
<font face="Century Gothic, URW Gothic L, Verdana, Arial,Helvetica">
<?php
//Datenbank-Login
$mysqlhost="localhost"; // MySQL-Host angeben
$mysqluser="*******"; // MySQL-User angeben
$mysqlpwd="*******"; // Passwort angeben
$mysqldb="db_filemanager"; // Gewuenschte Datenbank
//Mit Datenbank Verbinden
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen");
//Datenbank auswählen
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
//Variabel für das Auslesen aller Files"
$sql_files = "SELECT * FROM tbl_files ORDER BY software_category";
//Öffnet eine persistente Verbindung mit der MySQL Datenbank im zusamenhang mit Browser
$files_query = mysql_query($sql_files) or die("Anfrage nicht erfolgreich");
?>
<table>
<?php
do { // Beginn der do...while Schleife (Ab dem "{"-Zeichen)
if ($categorytitel!=$files['software_category']){ //If Anweisung für Tabellen Untertitel anfang
if ($categorytitel==""){ //Wenn $categorytitel noch nicht vorhanden dann...
$categorytitel=$files['software_category']; //...man nehme aus Variabel $files einen Kategoriename und //weist ihm $categoryname zu
}
?>
<tr>
<td COLSPAN=10 bgcolor=#D3D3D3><b><?=$categorytitel=$files['software_category'];?></b></td>
</tr>
<?php
} // Ende der If Anweisung "Categoryname"
if ($files['software_name']!=""){ // Wenn kein(!=) Softwarename in Datenbankeintrag vorhanden dann keine Ausgabe!
?>
<tr>
<td bgcolor=#bfdaf2><?=$files['software_name']?></td>
<td bgcolor=#bfdaf2>V. <?=$files['software_version']?></td>
<td bgcolor=#bfdaf2><?=$files['software_system']?></td>
<td bgcolor=#bfdaf2><?=$files['software_size']?></td>
<td bgcolor=#bfdaf2><?=$files['software_language']?></td>
<td bgcolor=#bfdaf2><a href="<?=$files['autor_link']?>"><?=$files['autor_name']?></a></td>
<td bgcolor=#bfdaf2><a href="<?=$files['autor_download']?>"><img src="bilder/homepage.jpg" width="20" height="20" border="0" alt="Download"></a></td>
<td bgcolor=#bfdaf2><a href="http://www.test.org/dowloads/<?=$files['software_filename']?>"><img src="bilder/download.jpg" width="20" height="20" border="0" alt="Download"></a></td>
</tr>
<?php
} // Ende der If Anweisung "Softwarename"
$categorytitel=$files['software_category']; // Variablenzuweisung für $categorytitle
}while ($files = mysql_fetch_array($files_query)) // Ende der Schleife
?>
</table>
</body>
</html>
Ich weiss das war jetzt viel Text, aber hat vielleicht noch jemand den Durchblick oder gar eine Lösung?
Freue mich auf jede Antwort
Gruss PatrickGeändert von zkmlch (11.10.11 um 09:03 Uhr)
-
Hi Patrick,
du könntest die Header der Datei abfragen mit get_headers().
Wenn du zB. nach 0.1 Sek keine Antwort bekommst oder der Status ungleich 200 ist schickst du die Anfrage zum nächsten Server.
-
Wie könnte das aussehen? Respektive, wie wird der User dann automatisch an den richtigen Server geleitet? *grübel*
-
28.09.11 08:12 #4
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Wäre es nicht ausreichend wenn du die Server in einer Schleife durchläufst und dann einfach mit fopen arbeitest?
PHP-Code:<?php
function server_check (){
// hier ein Array als Beispiel, bei dir wird dafür das Ergebnis der Datenbankabfrage durchlaufen
$ip = array ("htp://www.tutorials.de", "http://w.tutorials.de", "http://www.tutorials.de", "http://www.tutorials");
for ($a = 0; $a < count($ip); $a++) {
if (@fopen($ip[$a], "r")) {
echo '<a href="' .$ip[$a] .'">' .$ip[$a] .'</a>';
return;
}
}
// wenn kein Server erreichbar
echo "<b>Es ist ein Fehler aufgetreten!</b>";
return;
}
echo "Und hier das Ergebnis welche der Adressen erreichbar ist:<br />";
server_check();
?>Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Hallo tombe
Hört sich super an
Aus deinem Script resultiert bei mir ein Problem....
Wie binde Ich deinen Script ein? Sprich wie binde Ich so eine Funktion in den <a href="Link_zum_Download"> ein?
PHP-Code:<td bgcolor=#bfdaf2><a href="http://www.test.org/dowloads/<?=$files['software_filename']?>"><img src="bilder/download.jpg" width="20" height="20" border="0" alt="Download"></a></td>
-
10.10.11 10:30 #6
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Ändere die Funktion wie folgt ab:
Dann wird der Dateiname an die Funktion übergeben und du kannst den Rückgabewert entsprechend mit echo ausgeben.PHP-Code:<?php
function server_check ($file){
// hier ein Array als Beispiel, bei dir wird dafür das Ergebnis der Datenbankabfrage durchlaufen
$ip = array ("htp://www.tutorials.de", "http://w.tutorials.de", "http://www.tutorials.de", "http://www.tutorials");
for ($a = 0; $a < count($ip); $a++) {
if (@fopen($ip[$a], "r")) {
$pfad = "/downloads/" .$file;
$link = '<a href="' .$ip[$a] .$pfad .'"><img src="bilder/download.jpg" width="20" height="20" border="0" alt="Download"></a>';
return $link;
}
}
// wenn kein Server erreichbar
$link = "<b>Es ist ein Fehler aufgetreten!</b>";
return $link;
}
?>
<table>
<tr>
<td bgcolor=#bfdaf2><?php echo server_check($files['software_filename']); ?></td>
</tr>
</table>Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Da hier nun die PHP-Programmierung überwiegt, verschieb ich es mal.
Achja, hier noch ein kleines Tutorial con ComFreak zum Thema
[PHP] [Codeschnipsel] Überprüfen, ob eine Website erreichbar ist---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke tombe

Das läuft schon mal super... Jedoch dauert eine einzige Serveranfrage schon 5 - 7 Sekunden, nun wie sieht das den bei 100 Links aus? Wäre da eine onClick Funktion evetuell besser? Sonst würde der doch 100 mal die Funktion ausführen, dass bräuchte mal ne Zeit....
Irr ich mich, so gebt mir aufs Maul
-
10.10.11 12:11 #9
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Hm, das ist wirklich blöd.
Dann könnte man es höchstens so machen das einmal die Prüfung durchgeführt wird und dann alle Links mit dem gleichen Server erstellt werden.
Das müsste doch auch klappen oder?Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Das heisst man müsste dem server_check() eine Varible $working_server zuweisen und dann würde der html tag in etwa so aussehen? :
hmm ich kenn leider nur die PHP Logik jedoch nicht das genaue zusamenfügen der Befehle....PHP-Code:<a href="<?php $working_server ($files['software_filename']); ?>Downloadlink</a>
-
10.10.11 13:28 #11
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Ich würde es dann so machen das gleich "am Anfang der Seite" die Funktion aufgerufen wird. Die Funktion leifert dann ein Array welches mit Index 0 entweder die Domain des Servers oder mit Index 1 eine Fehlermeldung liefert.
Das Array wird dann ausgewertet und der Link oder die Fehlermeldung ausgegeben.
PHP-Code:<?php
function server_check (){
// hier ein Array als Beispiel, bei dir wird dafür das Ergebnis der Datenbankabfrage durchlaufen
$ip = array ("htp://www.tutorials.de", "http://w.tutorials.de", "http://www.tutorials.de", "http://www.tutorials");
for ($a = 0; $a < count($ip); $a++) {
if (@fopen($ip[$a], "r")) {
return array($ip[$a], "");
}
}
// wenn kein Server erreichbar
return array("", "<b>Es ist ein Fehler aufgetreten!</b>");
}
?>
<body>
<?php $server = server_check(); $files['software_filename'] = "datei.html"; ?>
<table>
<tr>
<td bgcolor=#bfdaf2>
<?php if ($server[1] == "") { ?>
<a href="<?php echo $server[0] .'/downloads/' .$files['software_filename']; ?>"><img src="bilder/download.jpg" width="20" height="20" border="0" alt="Download"></a>
<?php } else {
echo $server[1];
}
?>
</td>
</tr>
</table>
</body>Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Hi tombe
C'est genial! Es läuft TipTop! Ganz Herzliches Dankeschön meinerseits
Nur noch was kleines... Eigentlich möchte ich den Array aus einer Datenbank auslesenkönnen um mir einige Optionen warmhalten zu können... Wie hänge ich nun meine Datenbank ins Array?
Überglückliche Grüsse
Patrick
-
10.10.11 15:12 #13
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Du liest am Anfang der Funktion die Daten aus der DB aus und nimmst diese für die FOR-Anweisung
Ein Array brauchst du dann nicht.PHP-Code:$sql = "SELECT server FROM tabelle";
$rs = mysql_query($sql);
for ($a = 0; $a < mysql_num_rows($rs); $a++) {
if (@fopen(mysql_result($rs, $a, "server"), "r")) {
return array(mysql_result($rs, $a, "server"), "");
}
}
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Scheint aus irgendeinem mir nicht erklärenbahren Grund nicht zu funktionieren.... *grübel* wtf sonst funktionierts eigentlich immer so

Hier mein Codeausschnitt:
(Im Anhang noch der PrtSc der DB-Tabelle...)PHP-Code:<html>
<?php
//Datenbank-Login
$mysqlhost="localhost"; // MySQL-Host angeben
$mysqluser="****"; // MySQL-User angeben
$mysqlpwd="****"; // Passwort angeben
$mysqldb="db_filemanager"; // Gewuenschte Datenbank
function server_check (){
// hier ein Array als Beispiel, bei dir wird dafür das Ergebnis der Datenbankabfrage durchlaufen
$sql = "SELECT server_address FROM tbl_serverprio";
$rs = mysql_query($sql);
for ($a = 0; $a < mysql_num_rows($rs); $a++) {
if (@fopen(mysql_result($rs, $a, "server_address"), "r")) {
return array(mysql_result($rs, $a, "server_address"), "");
}
}
// wenn kein Server erreichbar
return array("", "<b>Es ist ein Fehler aufgetreten!</b>");
}
?>
<body>
<?php $server = server_check(); $files['software_filename'] = "datei.html"; ?>Geändert von zkmlch (10.10.11 um 17:10 Uhr)
-
11.10.11 08:11 #15
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Also ich habe jetzt mal (bis auf das letzte Feld) die Tabelle nachgestellt um die Funktion so wie oben zu benützen und nach einer kleinen Änderung geht es bei mir jetzt auch. Was bei dir wohl fehlt ist mysql_connect und mysql_select_db.
Beschreibe doch mal was bei dir nicht geht, denn so weiß keiner wo mit der Suche anfangen.PHP-Code:<?php
//Datenbank-Login
$mysqlhost="localhost"; // MySQL-Host angeben
$mysqluser="****"; // MySQL-User angeben
$mysqlpwd="****"; // Passwort angeben
$mysqldb="db_filemanager"; // Gewuenschte Datenbank
$db = @mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die ("Konnte keine Verbindung zur Datenbank herstellen");
mysql_select_db($mysqldb, $db);
function server_check (){
// hier ein Array als Beispiel, bei dir wird dafür das Ergebnis der Datenbankabfrage durchlaufen
$sql = "SELECT server_address FROM tbl_serverprio ORDER BY server_prio ASC";
$rs = mysql_query($sql);
for ($a = 0; $a < mysql_num_rows($rs); $a++) {
if (@fopen(mysql_result($rs, $a, "server_address"), "r")) {
return array(mysql_result($rs, $a, "server_address"), "");
}
}
// wenn kein Server erreichbar
return array("", "<b>Es ist ein Fehler aufgetreten!</b>");
}
?>
Was mir auch noch aufgefallen ist, du hast diese Zeile bei dir stehen:
Da habe ich bei mir zum Testen die Variable $files['software_filename'] mit einem Wert belegt. Diese Angabe musst du natürlich bei dir löschen!!PHP-Code:<?php $server = server_check(); $files['software_filename'] = "datei.html"; ?>Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
Ähnliche Themen
-
Biete mein fortgeschrittenes Wissen im Webdesign
Von X-Color im Forum Stellengesuche (unentgeltlich)Antworten: 0Letzter Beitrag: 14.10.06, 21:43 -
MySQL: ERROR 2013 (HY000): Lost connection to MySQL server during query
Von blumshuett im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 07.06.06, 23:23 -
mysql: mysql-server: mysql.sock fehlt (Suse 9.1)
Von zappoth im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 08.05.06, 18:06 -
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Von strandjunge im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 19.01.05, 15:33 -
WYSIWYG Editor, fortgeschrittenes Stringbearbeiten
Von Tim C. im Forum Javascript & AjaxAntworten: 7Letzter Beitrag: 05.02.04, 18:25



6Danke

Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren