tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
18
ZUGRIFFE
616
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    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 Patrick
    Geändert von zkmlch (11.10.11 um 09:03 Uhr)
     

  2. #2
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    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.
    zkmlch bedankt sich. 

  3. #3
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    Wie könnte das aussehen? Respektive, wie wird der User dann automatisch an den richtigen Server geleitet? *grübel*
     

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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();

    ?>
    zkmlch bedankt sich. 
    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.

  5. #5
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    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>
     

  6. #6
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Ändere die Funktion wie folgt ab:

    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>
    Dann wird der Dateiname an die Funktion übergeben und du kannst den Rückgabewert entsprechend mit echo ausgeben.
    zkmlch bedankt sich. 
    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.

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  8. #8
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    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
     

  9. #9
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  10. #10
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    Das heisst man müsste dem server_check() eine Varible $working_server zuweisen und dann würde der html tag in etwa so aussehen? :

    PHP-Code:
    <a href="<?php $working_server ($files['software_filename']); ?>Downloadlink</a>
    hmm ich kenn leider nur die PHP Logik jedoch nicht das genaue zusamenfügen der Befehle....
     

  11. #11
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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>
    zkmlch bedankt sich. 
    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.

  12. #12
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    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
     

  13. #13
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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

    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"), ""); 
        }

    Ein Array brauchst du dann nicht.
    zkmlch bedankt sich. 
    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.

  14. #14
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    Scheint aus irgendeinem mir nicht erklärenbahren Grund nicht zu funktionieren.... *grübel* wtf sonst funktionierts eigentlich immer so

    Hier mein Codeausschnitt:

    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"?>
    (Im Anhang noch der PrtSc der DB-Tabelle...)
    Angehängte Grafiken Angehängte Grafiken  
    Geändert von zkmlch (10.10.11 um 17:10 Uhr)
     

  15. #15
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.


    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>");
    }

    ?>
    Beschreibe doch mal was bei dir nicht geht, denn so weiß keiner wo mit der Suche anfangen.

    Was mir auch noch aufgefallen ist, du hast diese Zeile bei dir stehen:

    PHP-Code:
    <?php $server server_check(); $files['software_filename'] = "datei.html"?>
    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!!
     
    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

  1. Biete mein fortgeschrittenes Wissen im Webdesign
    Von X-Color im Forum Stellengesuche (unentgeltlich)
    Antworten: 0
    Letzter Beitrag: 14.10.06, 21:43
  2. MySQL: ERROR 2013 (HY000): Lost connection to MySQL server during query
    Von blumshuett im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 07.06.06, 23:23
  3. mysql: mysql-server: mysql.sock fehlt (Suse 9.1)
    Von zappoth im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 08.05.06, 18:06
  4. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    Von strandjunge im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 19.01.05, 15:33
  5. WYSIWYG Editor, fortgeschrittenes Stringbearbeiten
    Von Tim C. im Forum Javascript & Ajax
    Antworten: 7
    Letzter Beitrag: 05.02.04, 18:25

Stichworte