![]() |
Autoupgrader soll Datei ueber PHP-Skript laden
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:
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.[...] $filename = "/users/[...]_setup.exe"; header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"[...]_setup.exe\""); readfile($filename); Wer weiss Rat? |
Re: Autoupgrader soll Datei ueber PHP-Skript laden
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 |
Re: Autoupgrader soll Datei ueber PHP-Skript laden
Versuch mal im header noch die größe der Datei mitzugeben (Content-Size oder Content-Lenght müsse das sein)
|
Re: Autoupgrader soll Datei ueber PHP-Skript laden
Zitat:
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:
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. |
Re: Autoupgrader soll Datei ueber PHP-Skript laden
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" |
Re: Autoupgrader soll Datei ueber PHP-Skript laden
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 |
Re: Autoupgrader soll Datei ueber PHP-Skript laden
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. |
Re: Autoupgrader soll Datei ueber PHP-Skript laden
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? |
Re: Autoupgrader soll Datei ueber PHP-Skript laden
Am Virenscanner kanns wohl nicht liegen, da es manuell ja auch klappt. Eine Logfunktion hat die Komponente leider auch nicht.
|
Re: Autoupgrader soll Datei ueber PHP-Skript laden
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. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz