Ergebnis 1 bis 7 von 7

PHP Script mehrere längere aktionen durchführen

  1. #1 Zitieren
    Ritter Avatar von Feuerstern
    Registriert seit
    Sep 2007
    Beiträge
    1.789
    Hallo Leute
    ich habe ein paar Texte die ich gerne automatisch übersetzen lassen würde (das geht z.b. mit der Microsoft Translator API).
    Dazu habe ich bereits ein PHP Skript geschrieben das eine ID bekommt und denn Text dieser ID dann aus der Datenbank holt und mit der API übersetzt und dann in der Datenbank ablegt. Das Übersetzen in mehrere Sprachen dauert ein bisschen, weshalb es 3-5 Sekunden dauern kann (je nach Anzahl der Sprachen) bis das Skript den übersetzten Text in der Datenbank gespeichert hat.
    Da ich nun mehrere Texte übersetzen möchte komme ich dann irgendwann an das Server Zeitlimit für PHP Scripte (Sollten 60 Sekunden sein).
    Nun überlege ich wie ich die Sache am besten angehen kann. Ich würde auch gerne einen Fortschrittsbalken anzeigen.
    Mir sind bisher 2 Ansätze eingefallen:

    Der erste wäre das ganze per AJAX zu lösen. Ich würde dann nach und nach per AJAX das Skript aufrufen das einen Text mit gegeben ID übersetzt. Wenn der AJAX call erfolgreich war würde ich den Fortschrittsbalken aktualisieren und erneut per AJAX das Übersetzungsskript aufrufen (diesmal mit der nächsten ID).

    Als Alternative dachte ich, könne ich das ganze vlt auch rein in PHP und html lösen. Ich würde dann am Anfang die IDs ermitteln und in einem Array ablegen, das Script die erste ID übersetzen lassen und danach die Übersetzte ID löschen und den Fortschrittsbalken anzeigen. Dann würde ich die Seite neu laden und per POST oder GET die restlichen IDs übergeben (und vlt noch wieviele IDs es am Anfang waren) und die nächste ID im Array übersetzten. Das würde ich dann wiederholen bis keine IDs mehr da sind.
    Bei der Methode bin ich mir aber nicht ganz sicher wie ich den Seiten reload am besten anstelle, per header wäre ungünstig da ich dann nichts mehr ausgeben kann (Stattdessen vlt mit html meta Tag?)

    Ich bin mir nicht ganz sicher welche der Methoden die bessere wäre oder ob es vieleicht noch andere, bessere Methode gibt.
    Über ein paar Tipps oder Anregungen würde ich mich freuen.

    Grüße
    Feuerstern ist offline

  2. #2 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.188
    Du kannst auch die maximal execution time des PHP-Servers hochsetzen.
    Das wäre am Einfachsten. Nachteil: du kannst dann keinen Fortschrittsbalken anzeigen lassen.

    Als erste Zeile des Php-Skripts, Zeit in Sekunden:
    Code:
    ini_set('max_execution_time', 1000);

    oder direkt in der Datei php.ini
    max_execution_time=1000
    Blue Force ist offline Geändert von Blue Force (29.06.2016 um 21:46 Uhr)

  3. #3 Zitieren
    Knight Commander Avatar von Kellendil
    Registriert seit
    Jul 2009
    Beiträge
    2.093
    Zitat Zitat von Feuerstern Beitrag anzeigen
    Der erste wäre das ganze per AJAX zu lösen. Ich würde dann nach und nach per AJAX das Skript aufrufen das einen Text mit gegeben ID übersetzt. Wenn der AJAX call erfolgreich war würde ich den Fortschrittsbalken aktualisieren und erneut per AJAX das Übersetzungsskript aufrufen (diesmal mit der nächsten ID).
    Würde ich so machen (bzw. hab sowas ähnliches schonmal gemacht, funzt prima).
    Kellendil ist offline

  4. #4 Zitieren
    Ritter Avatar von Feuerstern
    Registriert seit
    Sep 2007
    Beiträge
    1.789
    Zitat Zitat von Kellendil Beitrag anzeigen
    Würde ich so machen (bzw. hab sowas ähnliches schonmal gemacht, funzt prima).
    Danke so hab ich es jetzt umgesetzt und funktioniert wie gewollt.

    Zitat Zitat von Blue Force Beitrag anzeigen
    Du kannst auch die maximal execution time des PHP-Servers hochsetzen.
    Das wäre am Einfachsten. Nachteil: du kannst dann keinen Fortschrittsbalken anzeigen lassen.

    Als erste Zeile des Php-Skripts, Zeit in Sekunden:
    Code:
    ini_set('max_execution_time', 1000);

    oder direkt in der Datei php.ini
    max_execution_time=1000
    Danke für den Tipp. 1000 wäre immer noch zu kurz für das erstmalige übersetzten, aber könnte vielleicht später für das Skript nützlich sein das die neuen Texte per Cronjob Aufruf übersetzen soll (Was deutlich weniger sein sollten als beim erste Übersetzen).

    Grüße und nochmals Danke
    Feuerstern ist offline

  5. #5 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.188
    Zitat Zitat von Feuerstern Beitrag anzeigen
    Danke für den Tipp. 1000 wäre immer noch zu kurz für das erstmalige übersetzten, aber könnte vielleicht später für das Skript nützlich sein das die neuen Texte per Cronjob Aufruf übersetzen soll (Was deutlich weniger sein sollten als beim erste Übersetzen).

    Grüße und nochmals Danke
    Der maximale Wert darf übrigens bis zu 2^31 =2147483648 betragen. Müsste also für alle Zwecke reichen Ich hatte die Verlängerung auch mal gebraucht und das Skript ist innnerhalb 2 Tagen ohne Probleme durchgelaufen.
    Blue Force ist offline

  6. #6 Zitieren
    Ritter Avatar von Feuerstern
    Registriert seit
    Sep 2007
    Beiträge
    1.789
    Zitat Zitat von Blue Force Beitrag anzeigen
    Der maximale Wert darf übrigens bis zu 2^31 =2147483648 betragen. Müsste also für alle Zwecke reichen Ich hatte die Verlängerung auch mal gebraucht und das Skript ist innnerhalb 2 Tagen ohne Probleme durchgelaufen.
    Überschreibe ich für das entsprechende Skript dann den Wert der in der .htaccess per "php_value max_execution_time" eingestellt ist, oder bleibt der trotzdem als maximale Begrenzung?

    Grüße
    Feuerstern ist offline

  7. #7 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.188
    .htaccess wird überschrieben falls du den Wert innerhalb des Skripts erhöhst.
    Erhöhst du den Wert in php.ini wird die ini von .htaccess überschrieben.
    Mit phpinfo() kannst du schauen welcher Wert in dem Skript gerade aktiv ist.
    Blue Force ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •