+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Asynchrone Arbeitsabläufe in PHP

  1. #1
    Neu an Board
    Registriert seit
    27.06.2013
    Beiträge
    76
    Bedankte sich
    10
    Erhielt 5 Danksagungen
    in 3 Beiträgen

    Standard Asynchrone Arbeitsabläufe in PHP

    Hallo zusammen.

    Für eine bestehende J1.5 Seite habe ich ein kleines Plugin geschrieben, welches beim Seitenaufruf aus bestimmten Ordnern alle Dateien löscht bis auf die Letzte.
    Um das zu bewerkstelligen habe ich ein Content-Plugin geschrieben:

    PHP-Code:
    <?php 
    defined
    '_JEXEC' ) or die( 'Restricted Access'); 
    jimport('joomla.plugin.plugin'); 
     
    class 
    plgContentTimelapseDelete extends JPlugin 
       function 
    plgContentTimelapseDelete( &$subject$config ) { 
          
    parent::__construct$subject$config ); 
       } 
       function 
    onPrepareContent( &$article, &$params$start) { 
            
    // Ordner die nach Dateien untersucht werden sollen 
            
    $filters = array("webcam/webcam1/*.jpg","webcam/webcam2/*.jpg");
            
            
    // Für jeden Ordner werden die Dateien untersucht und ggf. gelöscht
            
    foreach($filters as $filter){
                
    $files glob($filter);
                
                
    // Sortieren der Dateien nach deren Änderungsdatum ( neuste zuerst)
                
    array_multisort(array_map('filemtime'$files), SORT_DESC$files);  
            
                
    // Alle Dateien ausser der neusten löschen
                
    for($i 1$i<count($files); $i++){
                    
    unlink($files[$i]); 
                }
            }
        } 

    ?>
    Mein Problem ist jetzt, dass ich den Anwender nicht auf diese Aktion warten lassen möchte (da diese im Hintergrund und ohne sein wissen ablaufen soll).
    Ein Cronjob ist leider nicht ohne weiteres möglich und mit Datenbankfunktionen möchte ich in dem zusammenhang auch nicht arbeiten.
    Da ich soetwas in J3 bestimmt auch mal irgendwann gebrauchen kann, wäre es auch gut, wenn ich nicht mit AJAX arbeiten müsste (was notfalls in dem Fall oben auch ginge).

    Gibt es eine rein PHP-basierte Möglichkeit asynchrone Abläufe zu realisieren?

    MfG Monk

  2. #2
    Wohnt hier Avatar von addi
    Registriert seit
    29.11.2005
    Ort
    Berlin
    Beiträge
    2.187
    Bedankte sich
    21
    Erhielt 456 Danksagungen
    in 439 Beiträgen

    Standard

    Dann hast du einiges zu tun, wenn Cronjobs nicht laufen ...

    Es gibt Pseudocron-Scripte, die angestoßen werden, wenn die Seite aufgerufen wird.

    http://www.bitfolge.de/index.php?opt...9&limitstart=3
    Auch für Foren gilt: Das Leben verlangt mutige Entscheidungen. Wer zu spät kommt, den bestraft das Leben.

    Kein Support per PM. Keine Antwort auf Fragen, die mit der Thread-Frage nichts zu tun haben.

  3. #3
    Neu an Board
    Registriert seit
    27.06.2013
    Beiträge
    76
    Bedankte sich
    10
    Erhielt 5 Danksagungen
    in 3 Beiträgen

    Standard

    Danke für den Link. Mit zusätzlichen externen Skripts wollte ich eigentlich nicht arbeiten.

    Was mir spontan in den Kopf gekommen ist: Könnte ich nicht auch das System Event "onAfterRender" verwenden? Wird dieses Event nach der vollständigen Generierung der Seite gefeuert?!

    Das Content-Plugin ist ja an sich auch eine schlechte Idee weil es für jedes Modul und jeden Beitrag gefeuert wird?! Das System-Plugin ja nur einmal?

    MfG Monk

    MfG Monk

  4. #4
    Wohnt hier Avatar von addi
    Registriert seit
    29.11.2005
    Ort
    Berlin
    Beiträge
    2.187
    Bedankte sich
    21
    Erhielt 456 Danksagungen
    in 439 Beiträgen

    Standard

    Wird er, das wäre eine Möglichkeit.
    Auch für Foren gilt: Das Leben verlangt mutige Entscheidungen. Wer zu spät kommt, den bestraft das Leben.

    Kein Support per PM. Keine Antwort auf Fragen, die mit der Thread-Frage nichts zu tun haben.

  5. #5
    Neu an Board
    Registriert seit
    27.06.2013
    Beiträge
    76
    Bedankte sich
    10
    Erhielt 5 Danksagungen
    in 3 Beiträgen

    Standard

    Ich hab es gerade mal mit dem Systemplugin probiert. Dort ist die Ladezeit ungefähr identisch mit der Version des Content-Plugins.

    Ich werde jetzt so vorgehen, dass ich in dem Systemplugin prüfen werde ob JS aktiv ist und dann die Dateien per AJAX löschen. Da die meisten Anwender bei uns JS aktiviert haben müssen (für andere Intranet-Services), sollte das einen guten Kompromiss darstellen.

    MfG Monk

    Edit: So wie es aussieht, kann ich kein JS in einem System-Plugin verwenden (um einen AJAX-Request zu starten). Von dem her muss ich entweder wieder ein Content-Plugin daraus machen und damit leben, dass er das Skript häufig unnötig aufruft oder es einfach so lassen wie es momtan ist. Ich muss einfach mal die Preformance auf dem Produktivserver mal prüfen.
    Geändert von dr monk (20.08.2013 um 14:56 Uhr) Grund: Edit hinzugefügt.

  6. #6
    Hat hier eine Zweitwohnung
    Registriert seit
    24.01.2006
    Beiträge
    1.010
    Bedankte sich
    156
    Erhielt 706 Danksagungen
    in 377 Beiträgen

    Standard

    Wenn du weißt, wie PHP funktioniert, müsstest du doch sofort sehen können, dass all die Ideen/Konzepte nicht gut sind. Die einzige gescheite Lösung ist ein Cronjob sei es nun ein interner oder externer.

    Zusätzlich sollte man nie glob() verwenden...nutze die Joomla! API

  7. #7
    Wohnt hier Avatar von addi
    Registriert seit
    29.11.2005
    Ort
    Berlin
    Beiträge
    2.187
    Bedankte sich
    21
    Erhielt 456 Danksagungen
    in 439 Beiträgen

    Standard

    Das mit AJAX umzusetzen halte ich allerdings auch für unsinnig und abenteuerlich.

    Mit einem Plugin-Event könnte man die Uhrzeit überprüfen und dann z.B. in Stunden-Abständen die Anzahl der Dateien prüfen und in Abhängigkeit davon löschen. Das wäre eine "Notlösung".

    Ich frage mich, warum dein Server keine Cronjobs beherrscht, wenn du anspruchsvollere Aufgaben damit erledigen willst, das passt nicht so recht zusammen.
    Auch für Foren gilt: Das Leben verlangt mutige Entscheidungen. Wer zu spät kommt, den bestraft das Leben.

    Kein Support per PM. Keine Antwort auf Fragen, die mit der Thread-Frage nichts zu tun haben.

  8. #8
    Neu an Board
    Registriert seit
    27.06.2013
    Beiträge
    76
    Bedankte sich
    10
    Erhielt 5 Danksagungen
    in 3 Beiträgen

    Standard

    Es ist nicht der Server der das Problem darstellt sondern der Support. Bis da etwas richtig läuft, kann das Thema schon wieder nicht mehr aktuell sein.

  9. #9
    Hat hier eine Zweitwohnung Avatar von Matrikular
    Registriert seit
    14.01.2006
    Ort
    Nienburg
    Alter
    39
    Beiträge
    1.440
    Bedankte sich
    219
    Erhielt 593 Danksagungen
    in 441 Beiträgen
    Joomla! Development? Hire me! | Teach Yourself Programming in Ten Years

  10. #10
    Gehört zum Inventar Avatar von deejey
    Registriert seit
    22.04.2006
    Ort
    HH
    Beiträge
    9.829
    Bedankte sich
    706
    Erhielt 1.916 Danksagungen
    in 1.683 Beiträgen

    Standard

    Bei asynchronen Jobs muss man immer berücksichtigen, dass nicht absehbar ist, wann der Job wirklich in die Abarbeitung reinläuft und folglich wann er fertig sein wird. Ohne Sperrensystem kann der User bereits Daten ausgewählt/bearbeitet haben, die ihm der Job dann unter dem Hintern weghaut oder ändert, das ist schlecht.
    Kein Support über PM; Ignoriermodus aktiv bei "dringend", "schnell", "eilt", denn: Zeit ist relativ

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Berechtigungen

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