Mit Javascript prüfen ob Datei erstellt wurde

Alice

Erfahrenes Mitglied
Hallo Zusammen. :)

Ich erstelle mit PHP eine Text-Datei. Diese Text-Datei wird dann zu einer SVG-Datei umgewandelt. Anschließend wird die SVG-Datei in eine PNG-Grafik konvertiert.

Das Problem hierbei ist, dass der Befehl zum konvertieren nicht im Skript ausgeführt wird, sondern in einer extra PHP-Datei und hier liegt das Problem.

Je nach größe der SVG-Datei dauert dies zwischen wenigen Millisekunden bis locker 20 Sekunden (alles mehrmals ausgerechnet). Da aber im weiteren Verlauf des PHP-Skriptes genau diese PNG-Grafik benötigt wird, suche ich eine Möglichkeit mit Javascript zu prüfen ob die PNG-Grafik fertig erstellt wurde und das Skript quasi solange aufzuhalten bis die PNG-Grafik fertig ist. Wenn dies mit Javascript nicht möglich sein sollte (Pause) kann ich dies auch mit PHP (sleep) machen. Was wichtiger wäre ist eine Art "Statusmeldung" wie z.B. "Die angeforderte PNG-Grafik wird noch bearbeitet" und dieser Text soll auch wieder ausgeblendet werden sobald die PNG-Grafik erstellt wurde.

Ich habe leider so gut wie keine Erfahrung mit Javascript und würde mich sehr über Hilfe freuen. :)
 
Ganz einfach: du erstellst ein weiteres PHP-Skript, das prüft, ob die Datei erstellt wurde. Mit einem Javascript-Skript und AJAX schickst du eine Anfrage mit dem Namen der Datei an dieses PHP-Skript und prüfst so, ob die Datei erstellt wurde.
 
Mag ja sein, aber wenn du überprüfen willst, ob eine Datei existiert, musst du doch deren Namen kennen. Du speicherst doch irgendwo den Namen der Datei oder?
 
Schau mal hier:
PHP:
$svg_datei = rand(0000000001, 9999999999);

rename($svg_datei'.txt', $svg_datei'.svg');

Der Dateiname (TXT, SVG und PNG) ist also in der Varibale "$svg_datei" drin.
 
abgesehen davon, dass der Aufruf falsch ist, kann man leider nicht von einem PHP-Skript auf die Variablen eines anderen PHP-Skriptes oder anderen Aufrufes des gleichen Skriptes zugreifen. Du müsstest also den Namen entweder in einem Cookie oder einer Datenbank oder einer temporären Datei speichern. Kannst du dafür mal konkret erklären, wie der Ablauf des Bilderstellungsprozesses aussieht? Also Eingabe der Daten, Seitenaufrufe, Skript-Aufrufe etc.
 
Ok ich versuche es mal.

Als erstes gibt man in einem HTML Formular ein paar Daten in Input-Felder ein. Wenn man auf "Absenden" klickt, werden ein paar Berechnungen gemacht, die richtigen Pfade zu den Grafiken in einem Array gespeichert usw. Dann wird in einer Schleife der SVG-Code gebildet. Anschließend wird der gebildete SVG-Code in einer Text-Datei gespeichert. Das mache ich mit fopen. Direkt danach wird aus der Text-Datei eine SVG-Datei gemacht.

Nun sende ich durch fopen einen Befehl an eine PHP-Datei (z.B. makesvg.php)

PHP-Skript:
PHP:
$send_befehl = fopen("http://www.meine-webseite.de/ordner/makesvg.php?var=XXX", "r"); // Bei XXX steht eigentlich die Zufallszahl
fclose($send_befehl);

Jetzt wurde vom Skript an die "makesvg.php" der Befehl geschickt die SVG-Datei in eine PNG-Grafik zu konvertieren.

makesvg.php
PHP:
<?php
  $var = $_GET["var"];
  $thumb = new Imagick();
  $thumb->readImage($var.'.svg');
  $thumb->writeImage($var.'.png');
  $thumb->clear();
  $thumb->destroy();
?>

Und hier ist nun das Problem. Ich weiss nicht wann die PNG-Grafik fertig erstellt wurde. Ich möchte also direkt nach diesen Befehl
PHP:
$send_befehl = fopen("http://www.meine-webseite.de/ordner/makesvg.php?var=XXX", "r"); // Bei XXX steht eigentlich die Zufallszahl
fclose($send_befehl);
mit der Prüfung anfangen ob die PNG-Grafik fertig ist.
 
Aber dann kannst du doch folgendes anstellen:
PHP:
$send_befehl = fopen('http://www.meine-webseite.de/ordner/makesvg.php?var=' . $var, 'r'); // Bei XXX steht eigentlich die Zufallszahl 
fclose($send_befehl);
setcookie('filename', $var, time() + 3600);
Und dann kannst du in folgendes anstellen:

file-exists.php
PHP:
echo (int) file_exists($pfad_zu_deinem_ordner . '/' . $_COOKIE['filename']);
 

Neue Beiträge

Zurück