Lockfiles mit PHP (war: "Welche sprache soll ich nehmen? XML -> MySQL")



  • Hallo zusammen,

    ich hab ein PHP Script geschrieben, das mir aus einer XML Datei Daten in eine MySQL DB schreibt. Ich kann die PHP Datei auf dem V-Server (Debian mit apache, php5, mysql + phpmyadmin) in der konsole ausführen, doch wenn ich putty schließe läuft die nicht weiter. Meine Ideee war ein crontab jede minute mit der Datei zu starten, doch das wurden ganz schön viele über Nacht 🙂

    Hat jemand eine Idee, wie und mit welcher Programmiersprache ich das am schnellsten hin bekomme?
    hier mal der Code:

    <?php
    $MySQL_Host="localhost";		//Server
    $MySQL_User="root";				//User
    $MySQL_Passw="123";				//Passwort
    $db="xml_import";				//Datenbank
    if (! @$link=mysql_connect("$MySQL_Host","$MySQL_User","$MySQL_Passw")){
    	echo "Die Verbindung zu ",$MySQL_Host," konnte nicht hergestellt werden<br>";
    	exit;
    }
    mysql_select_db($db,$link);
    
    //Datenabrufen
    $thread = "1";
    
    //Abfrage0
    $abfrage0 = @mysql_query ("SELECT * FROM hosts WHERE status = 1 AND thread_id ='".$thread."'" ,$link);
    
    //Wenn NULL, dann hole host aus Main DB
    if (@mysql_num_rows ($abfrage0) == "0"){
    //mysql_query ("", $link);
    echo "Keine Hosts mehr\n";
    }
    while ($daten0 = @mysql_fetch_array($abfrage0)){
    mysql_query ("INSERT INTO urls (host_id,path,status) VALUES ('".@$daten0[id]."','/','0');", $link);
    
    //Abfrage1
    $abfrage1 = @mysql_query ("SELECT * FROM urls WHERE host_id = ".@$daten0[id]." AND status = '0'",$link);
    
    if (@mysql_num_rows ($abfrage1) == "0"){
    //mysql_query ("Update hosts SET status = '3' Where id = '".$daten0['id']."';", $link);
    echo $daten0['host']." ist fertig\n";  
    }
    
    while ($daten1 = @mysql_fetch_array($abfrage1)){
    set_time_limit (60);
    $xmlurl = "http://localhost/xml_export.php?url=http://".$daten0['host'].$daten1['path'];
    $xml = simplexml_load_string(file_get_contents($xmlurl));
    $hosts = explode(".*|",$xml->filter);
    $hosts = str_replace(".*", "", $hosts);
    $hosts = array_unique($hosts);
    
    foreach ($hosts as $host){
    $host_teile = parse_url($host);
    $host_teile['host'] = str_replace("www1.", "www.", @$host_teile['host']);
    $host_teile['host'] = str_replace("www2.", "www.", @$host_teile['host']);
    $host_teile['host'] = str_replace("www3.", "www.", @$host_teile['host']);
    $host= str_replace("www.", "", $daten0['host']);
    
    if (strpos(@$host_teile['host'], ".".$host) !== false){
    mysql_query ("INSERT INTO hosts (host,status,thread_id) VALUES ('".@$host_teile['host']."','1','".$thread."');", $link);
    }else{
    mysql_query ("INSERT INTO hosts (host) VALUES ('".@$host_teile['host']."');", $link);
    }
    }
    $count_intern = 0;
    $count= 0;
    $urls = explode(";",$xml->sitelist);
    $urls  = str_replace(";", "", $urls);
    $urls  = array_unique($urls);
    
    foreach ($urls as $url){
    $url_teile = parse_url($url);
    if (strpos(@$url_teile['host'], @$daten0['host']) !== false){
     $count_intern++;
     mysql_query ("INSERT INTO urls (host_id,path) VALUES ('".@$daten0['id']."','".@$url_teile['path']."');", $link);
     } 
    $count++;
    }
    $count_extern =  $count - $count_intern;
    mysql_query ("Update urls SET  status = '1' Where id = '".$daten1['id']."';", $link);       
    } //While 1
    } //While 0
    ?>
    

    1000 Dank

    Dennis

    edit by nman: Titel umeditiert.



  • DHO schrieb:

    Ich kann die PHP Datei auf dem V-Server (Debian mit apache, php5, mysql + phpmyadmin) in der konsole ausführen, doch wenn ich putty schließe läuft die nicht weiter.

    Das liegt aber nicht an PHP. Jede Anwendung, die als Kindprozess der SSH Verbindung gestartet wird, wird geschlossen wenn die Verbindung geschlossen wird. Guck dir mal http://wiki.ubuntuusers.de/SCREEN an. Damit kannst du das umgehen.



  • THX@Tobiking2 -Super, dann laufen die jetzt schon mal weiter.

    Wenn ich jetzt noch prüfen könnte ob das Script ausgeführt wird und falls nicht es noch mal neu starten, hätte ich schon mal die erste Lösung.

    Kann ich im PHP/Linux prüfen ob eine lockfile vorhanden ist?

    <?php
    $filename = '/var/www/y1.lock';
    
    if (file_exists($filename)) {
        echo "The file $filename exists";
    } else {
        echo "The file $filename does not exist";
    }
    ?>
    

    Wenn das Script abschmiert oder am ende ist, ist dann das lockfile weg???



  • Das hat rein gar nichts mit GNU/Linux oder Unix im Allgemeinen zu tun, das ist eine PHP-Frage. Ich verschieb dich mal.

    Btw, Lockfiles werden unter Unix typischerweise samt PID unter /var/run/PROZESSNAME.pid abgelegt.

    Schätze, dass dir sowas in der Art helfen sollte, rühre aber normalerweise PHP nicht freiwillig an:
    http://www.php.net/manual/en/function.getmypid.php#93753



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum Webzeugs verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten