[PHP] timeout irgendwie übergehen?

  • Hallo.


    Ich habe mir ein PHP-Script geschrieben, dass mit meine MP3 ein wenig auf meiner Festplatte verwaltet.


    Unter andem will ich, dass es aus einem Quell-Ordner die Mp3-Dateien ausliest, und dann richtig in die Ordner mit dem Anfangsbuchstaben des Interpreten kopiert und sie dabei in eine Sql-DB aufnimmt.

    Das ganze klapp auch schon wunderbar, nur wenn das mehr als 40 Dateien sind, dann bekomme ich immer einen Timeoutfehler und das finde ich dann irgendwie nicht so toll.


    Zum Ablauf. Das Script schnappt ich immer eine Datei (in einer for-Schleife), kopiert die dann per copy(datei_alt,datei_neu) an seinen neuen Platz und löscht die alte per unlink(datei). Da dann die andere Frage. Ich habe nirgends ein verschieben-Befehl gefunden. Denn der wäre ja schneller (Ziel- und Quell-Laufwerk sind gleich).


    Wenn nicht, dann wäre es doch hilfreich, irgendwie die Timeout-Sperre zu umgehen.


    Danke, Flo


    p.s. noch ne Frage zu MySql: Wenn ich meine DB backuppen will, reicht das wenn ich den Ordner /mysql/data/*DB_name*/ backupe, oder muss ich noch was beachten?

  • Re: [code=php] timeout irgendwie übergehen?


    Hi again,


    stelle doch mal "max_execution_time" in der php.ini hoch... :rolleyes:


    Gruss - 3dc


    PS:

    Zitat

    Ich habe nirgends ein verschieben-Befehl gefunden.

    unter windows: move
    unter *nix: mv
    PPS: coole Idee, das von PHP machen zu lassen... :)

  • Zitat

    stelle doch mal "max_execution_time" in der php.ini hoch...


    Ja, daran habe ich selber auch schon gedacht. Aber jetzt sagen wir mal, dass ich so 200 Mp3s hätte. Dann müsste ich die m-e-t ja auf ein paar Minuten stellen. Und das ist dann doch ein wenig gefährlich in manch anderen Prozeduren, denn schliesslich mache ich das PHP-Zeug erst seit ein paar Tagen :)


    Zitat

    unter windows: move
    unter *nix: mv


    Klar, aber ich meine in PHP. Oder kann man Systembefehle über PHP ansteuern? Das wäre dann schon einfacher, denn wie gesagt, verschieben ist extrem schneller als copy() und dann unlink(). Ausserdem würde die HD nicht so schnell fragment. werden. :)


    Zitat

    Oder aber während der runtime mittels: set_time_limit().


    Das habe ich jetzt leider nicht so ganz verstanden an welcher stelle in der Schleife man das aufruft. Denn ich denke, dass die Schleife in PHP schon fertig zu Ende Läuft, aber das Return der funktionen unlink() und copy() einfach zu lange auf sich warten lässt. Irgendwie müsste die Schleife immer warten, bis eine Datei kopiert ist, bis sie die nächste Anweisung rausgibt.
    Aber ich werde auf jeden Fall mal ein wenig rumtesten.


    Zitat

    Ich find die Idee auch nicht schlecht. Möchstest du das Script nicht evtl. veröffentlichen ?


    PPS: coole Idee, das von PHP machen zu lassen...


    Danke für die Blumen. Wenn das Ding mal sicher läuft, dann kann ich er ja posten. Vor allem sollte ich dann die festen Werte von mir mal mit Variablen vertauschen :rolleyes: Dan ist das ganze irgendwie alltagstauglicher. Aber dann gerne :)


    MfG Flo

  • Das set_time_limit() kannst du IMHO in einer Schleife immer aufrufen um den internen Counter wieder zu erhöhen (damit das timeout eben nicht auftritt).
    Zu deinem anderen Prolem... andere Befehle als copy(), unlink() und move_uploaded_file() kenne ich leider auch nicht ... da sollte dich doch was für dich finden lassen :)

    -> Tristan @ Work <-
    --

  • Ich habe ja extra einen Link auf die PHP-Doku gelegt, klick doch mal in meinem Beitrag oben auf set_time_limit() ;)


    Du rufst den Befehl einmal am Anfang (oder einer beliebigen anderen Stelle auf) und "überschreibst" damit die default-maximum-execution time. Dann kann also nur dieses eine Script die angegebene Zeit laufen.


    Eine alternative ist, dass du es in batches ablaufen lässt. Und zwischendurch eine Seite mit dem aktuellen Status ausgibst, und über einen parametrisierten Link dasselbe Script startest, halt nur an der Stelle wo du stehengeblieben bist. Kann man dann bspw. über einen Meta-refresh auch selbständig aktualisieren lassen. Soweiss man immer wo das script gerade dran ist, und kann auch zwischendurch mal pause machen... ;)

  • Zitat

    Original geschrieben von R. U. Serious
    Eine alternative ist, dass du es in batches ablaufen lässt. Und zwischendurch eine Seite mit dem aktuellen Status ausgibst, und über einen parametrisierten Link dasselbe Script startest, halt nur an der Stelle wo du stehengeblieben bist. Kann man dann bspw. über einen Meta-refresh auch selbständig aktualisieren lassen. Soweiss man immer wo das script gerade dran ist, und kann auch zwischendurch mal pause machen... ;)

    Diese Lösung ist natürlich zu favorisieren (wie alle Lösungen von R. U. Serious! :top: ) -- wichtig ist aber auch dabei, daß vor dem nächsten Abschnitt die max_execution_time nicht erreicht worden ist (entsprechend kleine Batches wählen)...


    Gruß,


    Henning.

    ________________________

  • hi,


    ich hab mir die Sache nochmal durch den Kopf gehen lassen und IMHO die ultimative Lösung für dich gefunden:

    Code
    <?
    shell_exec("/bin/mv 1.txt 2.txt");
    ?>

    Dazu darf php aber nicht im Safemode laufen. Das obige Beispiel moved die Datei 1.txt zu 2.txt. Es muss der komplette Pfad zum mv(move)-Befehl angegeben werden. Ausserdem muss das Verzeichnis entsprechende Schreibrechte haben. Das obige Beispiel habe ich eben gerade selbst getestet;... hat sogar funktioniert ;)


    Alles klar? :)


    Gruss - 3dc


    PS: http://www.php.net/manual/en/function.shell-exec.php

  • Auch wenn es leicht OT ist, die Sache mit den MP3s ging mir nicht aus dem Kopf. Da habe ich mal geschaut, was es so an OSS in dem Bereich gibt, und bin auch fündig geworden, von einigen einfachen Skripts bis hin zu relativ komplexen. Das folgende ist fürs Heim-Lan eine feine Sache:
    http://rimps.sourceforge.net/


    Auch wenn das Projekt leicht verlassen aussieht, die beta2 von der letzten version scheint zumindest auf den ersten Blick ihren Dienst prima zu verrichten (auch wenn ichs nicht ins Internet stellen würde...).


    ID-Tags von MP3 werden gelesen. Playlisten können erstellt, und die MP3s gestreamt werden. Die Dateien werden natürlich wie in obiger Frage selbsttätig aus anzugebenden Verzeichnissen extrahiert. :)

  • Zitat

    Eine alternative ist, dass du es in batches ablaufen lässt. Und zwischendurch eine Seite mit dem aktuellen Status ausgibst, und über einen parametrisierten Link dasselbe Script startest, halt nur an der Stelle wo du stehengeblieben bist. Kann man dann bspw. über einen Meta-refresh auch selbständig aktualisieren lassen. Soweiss man immer wo das script gerade dran ist, und kann auch zwischendurch mal pause machen...


    Hmm, da verstehe ich leider nur Bahnhof. Wie gesagt. Ich bin nicht wirklich das, was man einen PHP-Profi nennt. Aber was nicht ist... :D.


    Zitat

    shell_exec("/bin/mv 1.txt 2.txt");


    Hi. Danke. Das ist sehr interessant. Werde das mal bei gelegenheit ausprobieren. Danke :)


    MfG Flo

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!