zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Dateiendung später zusammensetzen

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 23.01.2014, 15:30
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.01.2014
Ort: Erfurt
Beiträge: 11
picard_1983 befindet sich auf einem aufstrebenden Ast
Standard Dateiendung später zusammensetzen

Hallo zusammen,

ich bin neu hier und versuche mal zu erklären was ich vor habe.
Ich habe ein kleines Tool gebaut was auf Basis PHP läuft.

Hier werden dateien hochgeladen in einen Ordner. Alles kein Problem.
Die hochgeladene Datei wird umbenannt und ohne Dateiendung abgespeichert.

GLeichzeit speichere ich den neuen Dateinamen und die dazugehörige Dateiendung in eine Datenbank. Alles kein Problem.

Jetzt komme ich zu meinen Problem.
Nachdem alles hochgeladen wurde und gespeichert wurde möchte ich die Datei ja wieder aufrufen.

Also machte ich folgendes: Ich setze den Dateinamen und die Endung aus der Datenbank wieder zusammen und wollte ganz normal über href die Datei öffnen.

Da war mein Denkfehler. Er kann die Datei nicht finden weil ich sie ja ohne Dateiendung abgelegt hatte.

Ich weiß aber das es im phpbb2 Forum so läuft. Da wird ebenfalls die Datei umbenannt physikalisch abgelegt ohne Dateiendung und später wird es zusammengestzt und lässt sich auch öffnen.

WIe geht das? Jemand einen Tipp?

Vielen Dank!


Gruß
Picard
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 23.01.2014, 16:10
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 12.11.2010
Ort: Bad Langensalza
Beiträge: 733
gabischatz ist in Verruf geraten
Standard

Und warum fragst du dann nicht in dem Forum?
Grüße
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 23.01.2014, 16:18
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.01.2014
Ort: Erfurt
Beiträge: 11
picard_1983 befindet sich auf einem aufstrebenden Ast
Standard

Ja ich hatte mich hier mal vor längeren angemeldet.
Dachte jemand hat einen Tipp...

Keiner einen TIpp?
Mit Zitat antworten
  #4 (permalink)  
Alt 23.01.2014, 16:21
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 18.06.2007
Ort: Verden
Beiträge: 405
chorn wird schon bald berühmt werden
Standard

Du kannst die Datei per PHP und readfile() ausliefern lassen. Wenn du vorher die richtigen Header übergibst, hat sie beim Download auch den richtigen Dateinamen.
Mit Zitat antworten
  #5 (permalink)  
Alt 23.01.2014, 16:44
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.01.2014
Ort: Erfurt
Beiträge: 11
picard_1983 befindet sich auf einem aufstrebenden Ast
Standard

Ok, kannst du mir kurz zeigen wie ich den richtigen Header übergebe?
Ich muss beim Upload den HEader auslesen?
Mit Zitat antworten
  #6 (permalink)  
Alt 23.01.2014, 18:19
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 18.06.2007
Ort: Verden
Beiträge: 405
chorn wird schon bald berühmt werden
Standard

Nein beim Download, wenn du Dateiname + Erweiterung wieder zusammensetzt. Sieh dir einfach mal das Tutorial an und achte auf "filename"

Download per readfile() @ PHP - tutorials.de: Tutorial, Forum, Anleitung & Hilfe
Mit Zitat antworten
  #7 (permalink)  
Alt 23.01.2014, 21:38
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.01.2014
Ort: Erfurt
Beiträge: 11
picard_1983 befindet sich auf einem aufstrebenden Ast
Standard

So, ich habe mich durchgelesen und einiges zusammengestellt.
Aber so richtig will es noch nicht funktionieren.

Man muss wissen: Die Dateien sind auf dem Server OHNE Dateiendung gespeichert. Der Name und die Endung kommen aus der DB.

z.B.
Datei auf dem Server: 12345tttgggg888

In der DB:

Spalte->Name: 12345tttgggg888
Spalte->Endung: pdf

Im Script will ich es dann zusammensetzen und als download anbieten:

PHP-Code:
<?php

function readfile_chunked($filename
{
  
$chunksize 1*(1024*1024);
  
$buffer '';
  
$handle fopen($filename'rb');
  if (
$handle === false)
  {
    return 
false;
  }
  
  while (!
feof($handle)) 
  {
    
$buffer fread($handle$chunksize);
    print 
$buffer;
    
ob_flush();
    
flush();
  }
  return 
fclose($handle);
}  

$file "12345ttt987";
$endung "pdf";

$datei_komplett $file.".".$endung;

$datei_neu "Testdatei.".$endung;

// Mimetypes definieren, headerdaten ausgeben, readfile_chunked(filepath); ausführen
    
$dateityp = array(
                
'doc'    => 'application/msword',
                
'bin'    => 'application/octet-stream',
                
'exe'    => 'application/octet-stream',
                
'rar'    => 'application/x-rar-compressed',
                
'so'    => 'application/octet-stream',
                
'pdf'    => 'application/pdf',
                
'swf'    => 'application/x-shockwave-flash',
                
'tar'    => 'application/x-tar',
                
'zip'    => 'application/zip',
                
'mpga'    => 'audio/mpeg',
                
'mp2'    => 'audio/mpeg',
                
'mp3'    => 'audio/mpeg',
                
'aif'    => 'audio/x-aiff',
                
'aiff'    => 'audio/x-aiff',
                
'aifc'    => 'audio/x-aiff',
                
'm3u'    => 'audio/x-mpegurl',
                
'ram'    => 'audio/x-pn-realaudio',
                
'rm'    => 'audio/x-pn-realaudio',
                
'rpm'    => 'audio/x-pn-realaudio-plugin',
                
'ra'    => 'audio/x-realaudio',
                
'wav'    => 'audio/x-wav',
                
'bmp'    => 'image/bmp',
                
'gif'    => 'image/gif',
                
'jpeg'    => 'image/jpeg',
                
'jpg'    => 'image/jpeg',
                
'jpe'    => 'image/jpeg',
                
'png'    => 'image/png',
                
'tiff'    => 'image/tiff',
                
'tif'    => 'image/tiff',
                
'mpeg'    => 'video/mpeg',
                
'mpg'    => 'video/mpeg',
                
'mpe'    => 'video/mpeg',
                
'qt'    => 'video/quicktime',
                
'mov'    => 'video/quicktime',
                
'avi'    => 'video/x-msvideo'
            
);
        
//ini_set('memory_limit', '-1');
        
            //$extget = explode(".", $datei_komplett);
            //$extension = $extget[count($extget)-1];
            
            
$sendmime $dateityp[$endung];
            
            
header ("HTTP/1.1 200 OK");
            
header("Content-type: $sendmime");
            
header("Content-Length: ".filesize($file)); // Dateigröße
            
header("Content-Disposition: attachment; filename=\"$datei_neu\"");
            
            
readfile_chunked($file);  


?>
Eventuell kann sich das noch einmal jemand anschauen...wäre echt super.
Also Datenbank auslesen und so das hab ich alles es geht um den download und die Datei zusammensetzen...siehe im script oben. Da habe ich das mal simuliert.

Vielen Dank.

Geändert von picard_1983 (23.01.2014 um 22:10 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 23.01.2014, 22:10
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.01.2014
Ort: Erfurt
Beiträge: 11
picard_1983 befindet sich auf einem aufstrebenden Ast
Standard

Hallo nochmal,

mit diesem Code funktioniert es eigentlich so ich es will. Aber irgendwie habe ich ein ungutes Gefühl. Ist der Code ok?

PHP-Code:
function DownloadFile($file
{
    
$file "123456";
$endung "jpg";

$datei_komplett $file.".".$endung;

$datei_neu "Testdatei.".$endung;

        if(
file_exists($file)) 
        {
            
header('Content-Description: File Transfer');
            
header('Content-Type: application/octet-stream');
            
header('Content-Disposition: attachment; filename='.basename($datei_neu));
            
header('Content-Transfer-Encoding: binary');
            
header('Expires: 0');
            
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            
header('Pragma: public');
            
header('Content-Length: ' filesize($file));
            
ob_clean();
            
flush();
            
readfile($file);
            exit;
        }
        else
        {
            echo 
"Nein";
        }

}

DownloadFile($file); 
Wieso brauch ich hier den Mime-Type nicht mehr herausfinden?
Mit Zitat antworten
  #9 (permalink)  
Alt 23.01.2014, 22:18
?!?
XHTMLforum-Kenner
 
Registriert seit: 20.03.2013
Beiträge: 1.638
explanator sorgt für eine eindrucksvolle Atmosphäreexplanator sorgt für eine eindrucksvolle Atmosphäre
Standard

Code nicht angesehen, daher nur zum Mime-type.

Der Mime-type ist nur für die Auswahl der Dateien interessant um diese zu selektieren, dabei wird die Dateiendung zum Vergleich herangezogen,. Du hast aber keine Dateiendung, daher uninteressant.

Siehe auch Dateiformat
und
Internet Media Type
__________________
"Wieso ist der Code schrott, ich dachte hier seien Profis..."
Aus einem Forum.
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 23.01.2014, 22:20
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.01.2014
Ort: Erfurt
Beiträge: 11
picard_1983 befindet sich auf einem aufstrebenden Ast
Standard

Ok, super. Konnte ich mir denken. Also für den eigentlichen Download brauch ich das nicht. Dann werde ich den kürzeren Code vorziehen

Danke dir...wenn vielleicht jemand anderen noch Hinweise hat nur zu

Thanks!
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Variablen zusammensetzen schuschel Javascript & Ajax 4 12.11.2012 17:12
Bilder zusammensetzen Todeshügel CSS 38 15.09.2010 00:14
Bilder ohne Dateiendung aufrufen RollingStones (X)HTML 4 22.01.2008 12:00
[IIS6+PHP5] Andere Dateiendung trotzdem PHP Lockhead883 Serveradministration und serverseitige Scripte 1 29.04.2007 15:56
Bildkacheln mit DIVs zusammensetzen Krischu CSS 28 21.03.2007 00:34


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:52 Uhr.