AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Autoupgrader soll Datei ueber PHP-Skript laden
Thema durchsuchen
Ansicht
Themen-Optionen

Autoupgrader soll Datei ueber PHP-Skript laden

Ein Thema von Kharlanki · begonnen am 26. Jun 2008 · letzter Beitrag vom 27. Jun 2008
Antwort Antwort
Kharlanki

Registriert seit: 9. Jul 2003
Ort: Düsseldorf
50 Beiträge
 
#1

Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 26. Jun 2008, 22:54
Hallo,

ich nutze den AutoUpgrader von Utilmind zum Aktualisieren (m)eines Programmes.
Nun moechte ich gerne wissen, wieoft das Update heruntergeladen wird. Darum gebe ich in der Steuerdatei (.inf), die auf dem Webspace liegt, statt des direkten Pfades ein PHP-Skript an, das neben der Dateiausgabe noch die Zugriffe zaehlt.

Code:
     
[...]
$filename = "/users/[...]_setup.exe";
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"[...]_setup.exe\"");
readfile($filename);
Der direkte Aufruf funktioniert. Der Autoupgrader roedelt zwar herum (die Anzeige der Uebertragungsgeschwindigkeit schwankt), aber es wird keine temporaere Datei angelegt. Und aktualisiert wird dann nach dem Neustart des Programmes auch nichts.

Wer weiss Rat?
Gruss,
Matthias

  Mit Zitat antworten Zitat
Benutzerbild von p0w3r5tr34m3r
p0w3r5tr34m3r

Registriert seit: 18. Aug 2003
Ort: Monheim am Rhein
153 Beiträge
 
RAD-Studio 2009 Pro
 
#2

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 26. Jun 2008, 23:37
du hast dem 2. php-skript die erforderlichen Rechte gegeben und die [...]_setup.exe ist auch eine aktualisierte version?

ansonsten hast du vielleicht auf dem "client"-Rechner keine Schreibrechte?!

als letzte möglichkeit wäre da noch das Utilmind einen direkt download der datei $filename erstellt... Sprich du lädst nicht die .exe sondern die .php runter...


so long,
p0w3r5tr34m3r
Florian Cülter
ich bin ein notorischer alles-klein-schreiber!

der 100. Beitrag nach 3 Jahren 25 Wochen und einem Tag
  Mit Zitat antworten Zitat
Kalfany

Registriert seit: 28. Feb 2008
Ort: München
153 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 27. Jun 2008, 09:40
Versuch mal im header noch die größe der Datei mitzugeben (Content-Size oder Content-Lenght müsse das sein)
  Mit Zitat antworten Zitat
Kharlanki

Registriert seit: 9. Jul 2003
Ort: Düsseldorf
50 Beiträge
 
#4

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 27. Jun 2008, 10:12
Zitat von p0w3r5tr34m3r:
du hast dem 2. php-skript die erforderlichen Rechte gegeben und die [...]_setup.exe ist auch eine aktualisierte version?
ansonsten hast du vielleicht auf dem "client"-Rechner keine Schreibrechte?!
als letzte möglichkeit wäre da noch das Utilmind einen direkt download der datei $filename erstellt... Sprich du lädst nicht die .exe sondern die .php runter...
Das Script kann ich manuell ja aufrufen. Dann funktionierts auch mit dem Download und dem Counter.
Schreibrechte auf dem Rechner sind auch nicht das Problem.
Dafuer, dass nur das Skript runtergeladen wird, dauert der Download zu lange. Es muss schon die richtige Datei sein. Zumindest vom Traffic her...

Zitat von Kalfany:
Versuch mal im header noch die größe der Datei mitzugeben (Content-Size oder Content-Lenght müsse das sein)
$groesse = filesize("$filename");
header("Content-Length: $groesse");

Das habe ich auch schon versucht. Dann zeigt er zwar die Groesse im Fortschrittsfenster an, aber kommt ueberhaupt nicht aus den Hufen. D.h. er laedt dann ueberhaupt nichts.
Gruss,
Matthias

  Mit Zitat antworten Zitat
Kalfany

Registriert seit: 28. Feb 2008
Ort: München
153 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 27. Jun 2008, 10:27
Hast du schon mal was anderes bei Content-Type anstelle von application/octet-stream versucht ... gibts ja noch mehr.

und/oder mit "Content-Transfer-Encoding: binary"
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#6

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 27. Jun 2008, 10:58
Ich hab mal vor längerer Zeit auch ein Download-Script erstellt und hatte damit bisher keine Probleme. Vielleicht hilft dir das ja:

Code:
$FileName = 'myFile.zip';
$FilePath = '/downloads/';

// Dateiendung auslesen
$extension = strtolower(substr(strrchr($FileName, "."), 1));

// MIME-Typ der Datei-Endung
switch($extension){
    case "asf":    $type = "video/x-ms-asf";               break;
    case "avi":    $type = "video/x-msvideo";              break;
    case "exe":    $type = "application/octet-stream";     break;
    case "mov":    $type = "video/quicktime";              break;
    case "mp3":    $type = "audio/mpeg";                   break;
    case "mpg":    $type = "video/mpeg";                   break;
    case "mpeg":   $type = "video/mpeg";                   break;
    case "rar":    $type = "encoding/x-compress";          break;
    case "txt":    $type = "text/plain";                   break;
    case "wav":    $type = "audio/wav";                    break;
    case "wma":    $type = "audio/x-ms-wma";               break;
    case "wmv":    $type = "video/x-ms-wmv";               break;
    case "zip":    $type = "application/x-zip-compressed"; break;
    default:       $type = "application/force-download";   break;
}

// Einen Bug im IE umgehen: Punkte im Dateinamen sollen durch ein "%2e" ersetzt werden
$header_file = (strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
               ? preg_replace('/\./', '%2e', $FileName, substr_count($FileName, '.') - 1)
               : $FileName;
               
// Header-Daten anpassen
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public", false);
header("Content-Description: File Transfer");
header("Content-Type: " . $type);
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename=\"" . $header_file . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($FilePath.$FileName));


// Daten Senden
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Kharlanki

Registriert seit: 9. Jul 2003
Ort: Düsseldorf
50 Beiträge
 
#7

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 27. Jun 2008, 12:01
Danke fuer das Skript. Aber leider laeufts auch damit nicht.
Sobald das "Content-Length" drin ist, hakt der Download ueber den AutoUpgrader. Wenn das nicht drin ist, wird zwar keine Dateigroesse angezeigt, aber immerhin wird was heruntergeladen, was vom Volumen her der Downloaddatei entspricht. Aber es wird keine temporaere Datei angelegt wie beim direkten Download ueber die Komponente, aber ohne das PHP-Skript dazwischen.
Den Content-Type habe ich auch mal auf application/x-msdos-program geaendert. Das hat mir Live HTTP Headers beim manuellen Herunterladen angezeigt.
Gruss,
Matthias

  Mit Zitat antworten Zitat
Kalfany

Registriert seit: 28. Feb 2008
Ort: München
153 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 27. Jun 2008, 12:36
Hast du schonmal einen anderen dateityp (z.B. ZIP) probiert?
Irgend einen Virenscanner (oder ähnliches) am laufen?

gibts denn bei dem autoupgrade irgendwie die möglichkeit anzuschaun was er den läd?
  Mit Zitat antworten Zitat
Kharlanki

Registriert seit: 9. Jul 2003
Ort: Düsseldorf
50 Beiträge
 
#9

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 27. Jun 2008, 14:51
Am Virenscanner kanns wohl nicht liegen, da es manuell ja auch klappt. Eine Logfunktion hat die Komponente leider auch nicht.
Gruss,
Matthias

  Mit Zitat antworten Zitat
Kharlanki

Registriert seit: 9. Jul 2003
Ort: Düsseldorf
50 Beiträge
 
#10

Re: Autoupgrader soll Datei ueber PHP-Skript laden

  Alt 27. Jun 2008, 23:32
Problem geloest!

Die Komponente hat partout drauf bestanden, dass die Datei so heisst wie die zu ladende URL, auch wenn das PHP-Skript einen neuen Namen gemeldet hat... Und einen Dateinamen wie download.php?version=1.2.3 mag Windows nicht besonders.

Loesung:
Der Autoupgrader ruft die Steuerdatei ab. Dort ist die zu ladende URL die Zieldatei. Diese wird mit mod_rewrite jedoch auf das Download-Skript umgebogen. Im Skript wird nun aus der Steuerdatei die Versionsnummer ausgelesen, der Counter fuer diese Version in der Datenbank inkrementiert und dann die Zieldatei wie gehabt zum Download angeboten.
Gruss,
Matthias

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz