Zurück   Flashforum > Flash und Server > PHP und MySQL

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-07-2011, 21:24   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 34
Fileupload mit dynamischem Verzeichnis

Hi, ich habe leider bisher gar keine Ahnung von PHP. Aber weil ich jetzt an einem Projekt arbeite, bei dem ich einen Fileuploader brauche, habe ich damit begonnen etwas mehr darüber zu lernen.

Mein Fileuploader funtioniert auch schon ohne Prolem, er ordnet alle Dateien in den Ordner /files/ im Rootverzeichnis meines Servers ein.
Ich möchte jetzt aber, dass die jeweils geupte Datei in einen Unterordner von /files/ gelegt wird. Dieser soll im UI in Flash festgelegt werden können.

Hier mal mein PHPscript:
PHP-Code:
move_uploaded_file($_FILES['Filedata']['tmp_name'], "./files/".$_FILES['Filedata']['name']);
chmod("./files/".$_FILES['Filedata']['name'], 0777); 
In AS2 habe ich jetzt noch den Befehl
PHP-Code:
File.upload("upload.php"); 

Ich würde aber die geupte Datei gerne in den Ordner legen der der Variable "upload_sname" entspricht.
Diese ist in AS festgelegt und dort veränderlich.
Kann ich sie mit loadVariablesNum("upload.php",0,"POST") übergeben und dann in PHP damit das entsprechende Verzeichnis anwählen?

Wenn ja, könnte mir jemand den PHP-Teil umschreiben, so dass es funktionieren würde?

Danke schonmal im Voraus.
Ich werde das jetzt nochmal weiter probieren, bis jetzt bin ich aber am verzweifeln.
Hawke ist offline   Mit Zitat antworten
Alt 07-07-2011, 01:54   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
da spielst du ein äusserst gefährliches Spiel
was ist, wenn jemand eine index.php sendet, mit upload_sname=./

dann überschreibt er dir womöglich die haupt index.php, und je nach Inhalt hat er nun alle Möglichkeiten, die er will, oder er lädt eine show.php hoch, die deine PHP-Dateien, im Klartext anzeigt (beispielsweise die Konfigurationsdatei samt Passwort zu deiner Datenbank)
halbwegs sicher wäre es eine begrenzte anzahl an Ordnern zu definieren, und nur eine ID zu übergeben (Zahlen, oder Buchtaben, oder Salat) in jedem Fall sollte man auch nicht von der ID direkt auf den Ordnernamen schliessen können
ebenso solltest du die Dateiendungen überprüfen
PHP-Code:
<?php
$whitelist_folders 
= array(
    
"a" => "abc",
    
"b" => "def",
    
//...
);
$whitelist_ending = array("txt""jpg""png""gif""zip""7z""rar""tar""gz""arj");

//wenn die übergebene Folder-ID nicht gültig ist, wird die Verarbeitung der Datei verweigert
if($folder $folder_whitelist$_GET['upload_sname'] ]){
    
$path "./files/$folder/"$_FILES['Filedata']['name'];
    
$ending strtolower(substr($pathstrrpos($path'.')+1));
    
    if(!
in_array($ending$whitelist_ending)){
        
$path .= ".txt";    //.txt anhängen, falls die Dateiendung nicht in der Whitelist steht
        //txt ist hier nur ein Beispiel, das keinen grossen Schaden anrichten kann (ausser Speicherplatz zu belegen)
        //alternativ kannst du natürlich auch hier sagen, ungültige Dateiendungen verarbeite ich nicht
    
}
    
    
move_uploaded_file($_FILES['Filedata']['tmp_name'], $path);
    
chmod($path0777);
}
?>
das sollte erstmal das gröbste abfangen. in AS sollte die Anfrage nun wie folgt lauten
PHP-Code:
File.upload("upload.php?upload_sname=" folderId); 
nun bin ich in PHP etwas eingerostet und AS2 ist nicht mein Freund (eher andersherum, ich bin nicht sein Freund), aber das sollte dir schonmal einen guten Einstieg geben
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 07-07-2011, 13:10   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 34
Danke thomas_E,
das hat mich schonmal deutlich weitergebracht.
Hat aber so noch nicht ganz funktioniert, die Datei wird irgendwie nicht in die erlaubten Verzeichnisse verschoben - leider.
Ich habe gestern noch eine eigene Lösung gefunden, auch wenn sie relativ umständlich ist, sie funktioniert ohne sicherheitsprobleme, und größtenteils in flash.

deine lösung wäre mir dennoch lieber, deshalb, kann es sein, dass es heißen müsste:

...
if($folder = $whitelist_folders[ $_GET['upload_sname'] ])
...


und wie gesagt, ich habe nicht wirklich ahnung von php, aber wird die varible $folder jemals definiert? bevor die if abfrage stattfindet? bzw, ist die definition in der if abfrage?

danke nochmal.
Hawke ist offline   Mit Zitat antworten
Alt 07-07-2011, 14:08   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
deine lösung wäre mir dennoch lieber, deshalb, kann es sein, dass es heißen müsste:
if($folder = $whitelist_folders[ $_GET['upload_sname'] ])
stimmt!

Zitat:
und wie gesagt, ich habe nicht wirklich ahnung von php, aber wird die varible $folder jemals definiert? bevor die if abfrage stattfindet? bzw, ist die definition in der if abfrage?
ja, sie ist in der If-Abfrage.

im Grunde kannst du das auch so schreiben:

Zitat:
$folder = $whitelist_folders[ $_GET['upload_sname'] ]
if($folder != false){
wobei != false bedeutet
!== false //nicht false (als Boolscher Wert)
!== 0 //nicht null (Zahl)
!== null //nicht undefiniert
!== "" //kein leerer String
!== array() //kein leeres Array

Edit: zum Thema Sicherheit: alles was du in Flash programmierst, kann auch ausgelesen werden
es gibt verschiedene Techniken, um das zu erschweren, aber verhindern kann man es nicht.
also sollte absolut nichts sicherheitsrelevantes in einem Flashfile stehen
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (07-07-2011 um 14:11 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 07-07-2011, 20:10   #5 (permalink)
NCC 1701 D
 
Benutzerbild von speedjunkie
 
Registriert seit: Oct 2009
Ort: Metropolregion Hamburg
Beiträge: 588
Zitat:
Zitat von Hawke Beitrag anzeigen
wird die varible $folder jemals definiert?
In PHP kannst Du Variablen definieren ab da, wo sie gebraucht werden.

Und in der if Abfrage mit dem @ davor um eventuelle Fehler zu unterdrücken.


@Hawke
Was hast Du für einen Server oder beim Hoster, welches Betriebssystem läuft da?
__________________
just be Daniel
JUNK FOOD: JavaScript Core Reference

Geändert von speedjunkie (07-07-2011 um 20:24 Uhr)
speedjunkie ist offline   Mit Zitat antworten
Alt 08-07-2011, 16:24   #6 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 34
@speedjunkie
ehrlich gesagt bin ich sogar da schon überfragt, ich habe einen kostenlosen webspace für bildungseinrichtungen von dem jugendnetz-berlin, der lässt an sich Perl, PHP, Python und TCL zu und hat außerdem eine MySQL-Datenbank.


Aber mitlerweile habe ich eine lösung gefunden. danke für die freundlich unterstützung an alle.

trotzdem habe ich eine weitere Frage, dann muss ich nicht extra nen neuen tread aufmachen:

ich möchte das meine geupten dateien in dem ordner mit zahlen benannt werden, und zwar einfach hochzählend.

sprich:

eine datei wird hochgeladen, php ordnet sie ein und checkt dann wie viele dateien noch in dem ordner sind und benennt die letzte geupte datei dann mit x.(jpg,png,gif,etc)
wobei x = anzahl der dateien + 1.

kann mir da jemand helfen?
Hawke ist offline   Mit Zitat antworten
Alt 09-07-2011, 08:31   #7 (permalink)
NCC 1701 D
 
Benutzerbild von speedjunkie
 
Registriert seit: Oct 2009
Ort: Metropolregion Hamburg
Beiträge: 588
Ab php5 kannst Du das Verzeichnis einfach scannen und das gibt die ein Array zurück.

Unter 5 musst Du öffnen, lesen schließen.

PHP-Code:
<?php
$targetDir_str  
strip_tags($_POST['postTargetSourceDirectory']);
                     
if(isset(
$_FILES['myImage']) and ! $_FILES['myImage']['error'] and ($_FILES['myImage']['size'] < 800000) )
{
    
saveSource();
}
else
{
    die(
"die Datei wurde nicht angenommen");
}

function 
directoryLength($dir)
{
    
$files scandir($dir1);    
    
$length count($files);    
    return 
$length 2// . und .. abgezogen
// end function

function saveSource()
{
    global 
$targetDir_str;
    
    
$info_arr getimagesize($_FILES['myImage']['tmp_name']); // Image INFO
    
    // Werte abfragen
    
    
if ($info_arr === false)
    {
        die(
'kein Image');
    }
    else
    {
        
$mime $info_arr['mime']; // MIME-Typ ermitteln
        
        
$mimeTyp_arr = array( "image/jpeg" => "jpg",
                                      
"image/gif" => "gif",
                                      
"image/png" => "png" ); // MIME-Typ Endung definieren
        
        // MIME-Typ überprüfen
        
        
if (!isset($mimeTyp_arr[$mime]))
        {
            die(
'kein JPEG GIF PNG');
        }
        else
        {
            
$fileExtension $mimeTyp_arr[$mime]; // File Endung setzen
        
}
                
                
$newImageName directoryLength($targetDir_str)+1;
        
        
$newImageName preg_replace('/[^0-9_-]/'""$newImageName); // Filename auf Zeichen überprüfen
        
        
$newImageName .= ".$fileExtension"// neuer Name mit Endung
        
        
$target "$targetDir_str$newImageName"// Ziel neuer Name
        
        // SPEICHERN und Meldung übermitteln
        
        
if(@move_uploaded_file($_FILES['myImage']['tmp_name'], $target))
        {
            
$tempFile $target;
            
chmod($tempFile,0644);
            
            echo 
"upload fertig";
        }
        else
        {
            echo 
"upload fehlgeschlagen";
        }
    }
    return;
// end function
?>
Gibt es einen besonderen Grund warum Du nicht AS3 (seit 2006 glaube ich) verwendest?
__________________
just be Daniel
JUNK FOOD: JavaScript Core Reference
speedjunkie ist offline   Mit Zitat antworten
Alt 10-07-2011, 00:53   #8 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 34
ja leider. habe keine neue version von flash.
sitze auf meinem flash 8 fest. reicht aber bisher immernoch.

ich probiere dein script mal gleich aus. zur not habe ich aber sogar wieder eine lösung mit etwas weniger php gefunden, immer besser für mich, da ich as2 wenigstens verstehe, wenn auch nicht perfekt

danke erstmal. wenn nochwas sein sollte schreibe ich.
Hawke ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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 sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fileupload boreker PHP und MySQL 4 31-03-2010 21:30
Problem mit FileUpload Magnuss PHP und MySQL 4 25-03-2006 13:13
Fileupload kakktus Server-Seite allgemein 9 27-04-2005 06:09
fileupload mit php ? komashooter PHP und MySQL 12 17-06-2004 09:10
PHP-Fileupload eliias PHP und MySQL 2 25-08-2003 22:22


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele