php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.11.2011, 09:01  
Neuer Benutzer
 
Registriert seit: 18.08.2009
Beiträge: 20
PHP-Kenntnisse:
Fortgeschritten
anbei befindet sich auf einem aufstrebenden Ast
Standard Probleme mit Dateien in der Datenbank

Hallo,

ich habe hier eine MSSQL Datenbanktabelle mit eine Spalte Datentyp = Image geerbt. Auf diese Anwendung greifen 5 verschiedene VB Appklikationen zu. Ich habe eine PHP-Anwendung geschrieben, die 4 dieser Anwendungen ersetzt. Soweit so gut.
Nur mit der 5. Anwendung (Ein Outlook-Addin, das die Dateien aus der Datenbank ausliest und an eine Mail anhängt.) habe ich Probleme. Diese kann zwar die Daten (z.B. PDF-Dateien auslesen), jedoch sind sie dann nicht mehr lesbar. Das muss aber zwingend weiter funktionieren.

Soweit ist mir das verständlich, da ich die Daten vor dem Speichern mit base64_encode umwandel.

Nun komme ich nicht weiter. Das höchste der Gefühle, das ich mit verschiedenen mssql_escape_string Varianten hinbekomme ist, das ich z.B. ein leeres PDF angezeigt bekomme.

Nun weiss ich nicht wirklich weiter und bin für Tips/Hinweise/Lösungen sehr dankbar.

Hier mein Quelltext für den Upload. addslashes () verwende ich bis dato nicht mehr, da es mir zu fehlerbehaftet war.
PHP-Code:
<?php

$error 
false ;
$errormessage 'Fehler: ';
$szPath 'phptemp/';

    if ( isset ( 
$_REQUEST 'Add_Zeichnung' ] ) &&  $_FILES 'datei' ][ 'size' ] > ) {
        
// Dateigröße prüfen: max. 20MB
        
if ( $_FILES 'datei' ][ 'size' ] > 20971520 ) {
            
$error true;
            
$errormessage .= 'Die Datei ist gr&ouml;sser als 20 MByte.';
        } else {
            
$nfSize $_FILES 'datei' ][ 'size' ];
            
$szfFilename $_FILES 'datei' ][ 'name' ];
        }

        if ( !
$error ) {
            
move_uploaded_file $_FILES ['datei'] ['tmp_name'], $szPath.$_FILES 'datei' ] [ 'name' ] ) or $error true.$errormessage .= 'Kopiervorgang fehlgeschlagen.';
        }

        
// Dateiweiterung prüfen
        
$szArray explode("."strrev $_FILES 'datei' ][ 'name' ] ) );
        
$szfFileExt strtolower strrev $szArray ] ) );
        
        
$szArray1 = array ( 'doc''docx''dwg''dxf''gif''igs''jpg''pdf''png''prt''step''stp''txt' );
        
$szArray2 = array (  );    
        
        switch ( 
$szfFileExt ) {
            case ( 
array_search $szfFileExt$szArray1 ) !== false ) :
                
$szBinaryData file_get_contents$szPath.$szfFilename );
                
$szData base64_encode$szBinaryData );
                break ;
            case ( 
array_search $szfFileExt$szArray2 ) !== false ) :
                
$szBinaryData fopen $szPath.$szfFilename"r" ) ;
                
$szData addslashes fread $szBinaryData filesize$szPath.$szfFilename ) ) );
                break;
            default :
                
$error true ;
                
$errormessage .= 'Dateierweiterung nicht definiert.';
        }
        
// Datei Speichern
        
if ( !$error ) {
            
$szSql "INSERT INTO [".constant 'ZN_DB' )."].[dbo].[tZN] (
                 fFile
                   ,fDate
                   ,fUser
                   ,fZn
                   ,fFileExt
                   ,fSize
                   ,fArtnr
                   ,fBez1
                   ,fBez2
                   ,fFilename
                   ,fStatusnr
                   ,fStatus
                   ,fZN_REV
                   ,fCheck
            ) VALUES (
                '"
.$szData."'
                ,GETDATE ()
                ,'"
.$_SESSION 'SB_NAME' ]."'
                ,'"
.$_SESSION 'ZN' ]."'
                ,'"
.$szfFileExt."'
                ,'"
.$nfSize."'    
                ,'"
.$szARTNR."'
                ,'"
.utf8_decode $szBEZ_1 )."'
                ,'"
.utf8_decode $szBEZ_2 )."'
                ,'"
.utf8_decode $szfFilename )."'
                ,'1'                
                ,'"
.utf8_decode 'Gültig' )."'
                ,'"
.$_SESSION 'ZN_REV' ]."'
                ,'0'
            )"
;
            
$query mssql_query $szSql ) or die ( "Es gab Probleme bei der Abfrage: ".$szSql );
        }
    }
?>
Hier meine Quellcode für die Ausgabe. ID = 33000 ist die Grenze zwischen alt und neu.

PHP-Code:
<?php 
$error 
false ;
$szPath 'temp/';
$szArray1 = array ( 'doc''docx''dwg''dxf''gif''igs''jpg''pdf''png''prt''step''stp''txt' );
$szArray2 = array (  );    

if ( isset ( 
$_REQUEST 'ID' ] ) && $_REQUEST 'ID' ] != '' ) {
    
$nID $_REQUEST 'ID' ] ;
} else {
    
$error true ;
    die ( 
'Fehler print.zv.php: Kein ID gesetzt.' );
}

if ( !
$error ) {
    
$szSql "SELECT * FROM [".constant 'ZN_DB' )."].[dbo].[tZN] WHERE ID = '".$nID."'";
    
$query mssql_query $szSql ) or die ( "Es gab Probleme bei der Abfrage: ".$szSql );
    if ( 
mssql_num_rows $query ) != ) {
        echo 
'Es ist ein Fehler aufgetreten.';
        
$error true;
    } else {
        while ( 
$row mssql_fetch_assoc $query ) ) {
            
$szDateiName $row 'fFilename' ];
            
header"Cache-Control: no-cache, must-revalidate" );
            
header"Content-type: application/".$row 'fFileExt'] ).'"';
            
header'Content-disposition: attachment; filename="'.$szDateiName.'"' );
            if ( 
$nID '33000' ) {
                print 
$row 'fFile'];
            } else {
                switch ( 
$row 'fFileExt' ] ){
                    case ( 
array_search $row 'fFileExt' ], $szArray1 ) !== false ):
                        print 
base64_decode $row 'fFile'] ); break;
                    case ( 
array_search $row 'fFileExt' ], $szArray2 ) !== false ):
                        print 
$row 'fFile']; break;
                    default: echo 
'Dateierweiterung unbekannt';  
                }
            } 
        }
    }
}

?>
Vielen Dank im Voraus und VG
Andreas
anbei ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.11.2011, 12:48  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Nur damit ich das verstehe: Die alte Software hat die Daten auch schon base64-codiert abgelegt? Wenn nicht: Warum willst du das dann tun?
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 17.11.2011, 14:39  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

wohl nicht - ich glaub visual basic kennt nicht mal ne Funktion base64 - ich vermute daher dass die Dateien einfach als BinärDaten in die Datenbank geschrieben wurden

Dann musst du die natürlich genau so ausliefern

versuch bitte mal herauszufinden, ob dort die Dateien im "rohen" Binärformat vorliegen (Beispiel Jpeg-Bild ... Am Anfang sollte die Zeichenfolge "JFIF" ab dem 7ten Byte zu erkennen sein)

Obendrein bringt es natürlich wenig, Daten einer Datei base64 encoded zu senden, wenn der Empfänger - in deinem Falle Outlook bzw dessen Plugin damit gar nix anfangen kann
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 23.11.2011, 09:32  
Neuer Benutzer
 
Registriert seit: 18.08.2009
Beiträge: 20
PHP-Kenntnisse:
Fortgeschritten
anbei befindet sich auf einem aufstrebenden Ast
Standard

Danke erstmal. Meine Fragen/Antworten findet ihr untenstehend.

Zitat:
Zitat von mquadrat Beitrag anzeigen
Nur damit ich das verstehe: Die alte Software hat die Daten auch schon base64-codiert abgelegt? Wenn nicht: Warum willst du das dann tun?
Zitat:
Zitat von eagle275 Beitrag anzeigen
Dann musst du die natürlich genau so ausliefern
Möchten nicht, für mich war es nur die sicherste Methode, das der Upload funktioniert. Was könnte/müsste ich dann dahingehend in meiner Methode ändern?

Zitat:
Zitat von eagle275 Beitrag anzeigen
versuch bitte mal herauszufinden, ob dort die Dateien im "rohen" Binärformat vorliegen (Beispiel Jpeg-Bild ... Am Anfang sollte die Zeichenfolge "JFIF" ab dem 7ten Byte zu erkennen sein)
Ein SELECT gibt mir bei einem JPG für die Spalte fFile z.B. "0xFFD8FFE000104A46494600010101012C012C0000FFDB0.. ....." aus.

Zitat:
Zitat von eagle275 Beitrag anzeigen
Obendrein bringt es natürlich wenig, Daten einer Datei base64 encoded zu senden, wenn der Empfänger - in deinem Falle Outlook bzw dessen Plugin damit gar nix anfangen kann
Ein Kollege probiert sich gerade an einem einfachen VBA Script. Da gibt es Möglichkeiten bzgl. base64.
anbei ist offline   Mit Zitat antworten
Alt 23.11.2011, 11:06  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von anbei Beitrag anzeigen
Ein SELECT gibt mir bei einem JPG für die Spalte fFile z.B. "0xFFD8FFE000104A46494600010101012C012C0000FFDB0.. ....." aus.
4A 46 49 46 = JFIF

Das sieht nicht nach base64-Kodierung aus.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 23.11.2011, 11:30  
Neuer Benutzer
 
Registriert seit: 18.08.2009
Beiträge: 20
PHP-Kenntnisse:
Fortgeschritten
anbei befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Das sieht nicht nach base64-Kodierung aus.
Das ist korrekt, das sind die bestehenden Einträge. Wie müsste ich denn dann die Dateien sonst speichern, das ich auf das selbe Format kommt?
anbei ist offline   Mit Zitat antworten
Alt 23.11.2011, 16:00  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Gar nicht kodieren... Einfach so rein wie sie auch auf der Platte liegen.

Hast du Zugriff auf den Quellcode der VB-Anwendungen? Dann könntest du einfach nachschauen was dort gemacht wird.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 23.11.2011, 16:15  
Neuer Benutzer
 
Registriert seit: 18.08.2009
Beiträge: 20
PHP-Kenntnisse:
Fortgeschritten
anbei befindet sich auf einem aufstrebenden Ast
Standard

Leider nicht. Aber ich bin mit der aktuellen Lösung (Performance, Datenbankgröße (aktuell 24GB), Backup-Restore) eh nicht zufrieden.

Ich exportiere die Daten nun aus der Datenbank in eine definierte Verzeichnisstruktur.

Somit kann ich weiterhin auf die Dateien (nun halt per Link) zugreifen und das Outlookthema unter VBA ist dann auch einfacher (denken wir nach ersten Tests aktuell).

Was meint ihr?
anbei ist offline   Mit Zitat antworten
Alt 24.11.2011, 10:06  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Dateien außerhalb der DB ist immer einfacher. Finde ich jedenfalls.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hilfe: datenbank mappen und kopieren M*I*B Datenbanken 29 15.02.2012 21:55
Werte in Datenbank durch Komma getrennt und Probleme bei der Ausgabe Marly PHP Einsteiger 7 09.08.2011 11:04
[Erledigt] Datensätze von einer MySQL in eine andere MySQL Datenbank abgleichen Marvin75 Datenbanken 7 10.06.2011 18:00
Mehrere Querys klappen in PhpMyAdmin aber nicht in PHP djscaleo Datenbanken 36 15.05.2011 02:00
Mehrere CSV Dateien in Datenbank Willi0815 PHP Einsteiger 16 08.03.2011 12:20
Probleme beim senden an die Datenbank mastertnt Datenbanken 24 03.01.2009 21:53
upload & beitrag in datenbank übergeben - in einem scrip haubna PHP Tipps 2008 3 30.05.2008 16:05
Mit php dynamisch Namen von Bildnamen sowie Pfad in mysql Datenbank speichern mallmis PHP Tipps 2008 1 19.11.2007 23:04
Datenbank Probleme Lern_HEIKO PHP Tipps 2008 8 03.11.2007 18:35
Probleme mit Sonderzeichen... Datenbanken 1 02.08.2005 23:37
probleme beim löschen aus der datenbank DDogg PHP Tipps 2005 7 27.04.2005 11:59
[Erledigt] Dateien aus Verzeichnissen vom Webserver auslesen und linken PHP Tipps 2004 3 08.09.2004 10:07
[Erledigt] probleme mit event datenbank Datenbanken 1 04.09.2004 00:30
Probleme Mit der Ausgabe von php dateien Server, Hosting und Workstations 6 22.07.2004 17:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
übergebe php base64_encode base64_decode $_request image insert mysql datenbank bild speichern, php jfif base64, übergebe php base64_decode $_request image insert mysql datenbank bild speichern

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum