Anzeige:
Ergebnis 1 bis 2 von 2

Thema: SafeMod und Dateiupload

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.12.2004
    Ort
    Kornwestheim
    Beiträge
    13

    SafeMod und Dateiupload

    Hi miteinander,

    ich habe das Problem, dass ich durch SafeMode-Restriktionen keine Dateien schreiben kann.
    Ich versuche aufgrund dessen dies nun mit den PHP-eigenen FTP-Funktionen zu lösen, was aber auch nicht so funktioniert wie es sollte.

    Folgender Code wird eingebunden:
    PHP-Code:
    class upload {
         
             
    #dircheck => besteht das Verzeichnis?
             
    function dircheck($ftpverbindung,$dir){
                 
    # prüfen wir mal ob Verzeichnis besteht!
                 
    if(is_dir($dir)){
                     
    $dirchecker "vorhanden";                  
                 }else{
                     
    ftp_chdir($ftpverbindung,"/httpdocs/SIT/data/userimages/");
                     
    ftp_mkdir($ftpverbindung,$_COOKIE[sitlog]);
                     
    chmod($dir,0777);
                      
    # Verzeichnis angelegt
                 
    }
             }
             
             
    #uploadfile
             
    function uploadfile($ftpverbindung,$datei,$verzeichnis,$zaehler) {
                 
    #erstmal die größe checken und Dateiendung
                 // filename muss extrahiert werden, um die Endung zu bekommen
                        
    $dname explode(".",$datei_name);
                        
    $dnamesize count($dname);
                        
    $datei_ext $dname[$dnamesize-1];
                
                    
                          
    $dateiname date(dmy) . $zaehler;
                          
                          
    # $ftpdir = ftp_chdir($ftpconnection,$verzeichnis);
                          
    $dirload $verzeichnis $dateiname ".jpg";
                          
    ftp_put($ftpverbindung,$dirload,$datei,FTP_BINARY);
                          
                          
    // das ganze am Besten in eine Variable packen!
                            
    $saveddatei $makedirlink "/" $dateiname ".jpg";
                            if(
    file_exists($saveddatei)) {
                                echo 
    "<br>Die Datei $datei_name wurde erfolgreich gespeichert. Augrund sicherheitstechnischen Ma&szlig;nahmen wurde der Dateiname allerdings ver&auml;ndert.<br />";
                            }else{
                                echo 
    "<p><strong>Upload gescheitert!!</strong><br /> Es wurde eine Datei angegeben, welche entweder zu groß (>650 kb) oder nicht auf die Dateiart *.jpg endet.</p>";
                            
    clearstatcache();
                            }
             }
     } 
    Eingebunden wird es dann wie folgt:
    PHP-Code:
    include("$source_dir/inserate/uploadclass.php");
                          
    // initialisiere Classe für Dateien
                          
                          
    if($upload1=="") {
                              echo 
    "Es wurde keine Datei in Dateifeld 1 zum Upload benannt. Somit wurde keine Datei hochgeladen. <br /><br />";
                          }else{
                              
    $fileload1 = new upload;
                                  
    $fileload1->dircheck($ftpconnection,$makedirlink);
                                  
    $fileload1->uploadfile($ftpconnection,$upload1,$makedirlink,1);
                                  
                                  
    $saveddatei1 $saveddatei;
                          }
                          if(
    $upload2=="") {
                              echo 
    "Es wurde keine Datei in Dateifeld 2 zum Upload benannt. Somit wurde keine Datei hochgeladen. <br /><br />";
                          }else{
                              
    $fileload2 = new upload;
                                  
    $fileload2->dircheck($ftpconnection,$makedirlink);
                                  
    $fileload2->uploadfile($upload2,$makedirlink,2);
                                  
                                  
    $saveddatei2 $saveddatei;
                          } 
    wobei sich das bis $fileload5 fortsetzt.

    Das Formular sieht wie folgt aus:
    HTML-Code:
    <input type="file" name="upload1" size="25" accept="image/jpg">
            <input type="file" name="upload2" size="25" accept="image/jpg">
            <input type="file" name="upload3" size="25" accept="image/jpg">
            <input type="file" name="upload4" size="25" accept="image/jpg">
            <input type="file" name="upload5" size="25" accept="image/jpg">
    Als Fehlermeldung wird folgendes ausgegeben:
    Warning: ftp_mkdir(): 1: File exists in /home/httpd/vhosts/swissimmotrade.ch/httpdocs/SIT/sources/inserate/uploadclass.php on line 17

    Warning: chmod(): Unable to access /httpdocs/SIT/data/userimages/1 in /home/httpd/vhosts/swissimmotrade.ch/httpdocs/SIT/sources/inserate/uploadclass.php on line 18

    Warning: chmod(): open_basedir restriction in effect. File(/httpdocs/SIT/data/userimages/1) is not within the allowed path(s): (/home/httpd/vhosts/swissimmotrade.ch/httpdocs:/tmp) in /home/httpd/vhosts/swissimmotrade.ch/httpdocs/SIT/sources/inserate/uploadclass.php on line 18

    Upload gescheitert!!
    Es wurde eine Datei angegeben, welche entweder zu groß (>650 kb) oder nicht auf die Dateiart *.jpg endet.
    Liegt es an meiner Logik oder am SafeMode?
    Link zu PHPinfo

    Wäre über einen Denkansatz oder einer Lösungsmöglichkeit sehr erfreut!

    Vielen Dank schonmal!
    enjoy your short trip of live!

  2. #2
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Hi,

    hast Du Dir mal die Fehlermeldungen/Warnungen genau durchgelesen? Ist Dir dabei nichts aufgefallen?
    Warning: chmod(): Unable to access /httpdocs/SIT/data/userimages/1 in /home/httpd/vhosts/swissimmotrade.ch/httpdocs/SIT/sources/inserate/uploadclass.php on line 18

    Warning: chmod(): open_basedir restriction in effect. File(/httpdocs/SIT/data/userimages/1) is not within the allowed path(s): (/home/httpd/vhosts/swissimmotrade.ch/httpdocs:/tmp) in /home/httpd/vhosts/swissimmotrade.ch/httpdocs/SIT/sources/inserate/uploadclass.php on line 18
    Falls es Dir noch nicht deutlich genug ist: TIP: die Basis

    Außerdem was soll denn der Schmarrn:
    Ich habe das Problem, dass ich durch SafeMode-Restriktionen keine Dateien schreiben kann.
    Ich versuche aufgrund dessen dies nun mit den PHP-eigenen FTP-Funktionen zu lösen, was aber auch nicht so funktioniert wie es sollte.
    Vorallem, weil Du dann nachher in der Funktion "normale" Funktionen (is_dir(), chmod()) mit FTP-Funktionen (ftp_chdir(), ftp_mkdir()) mixed.

    Setzte Deine Variablen (in diesem Falle $dir) richtig und dann geht das auch (nebenbei: eine Funktion sollte immer eindeutig sein - die Funktion heißt dircheck, gibt aber als Ergebnis nicht zurück ob es nun existiert oder nicht), z.B.:
    PHP-Code:
             #dircheck => besteht das Verzeichnis?
            
    function dircheck($dir) {
                
    # prüfen wir mal ob Verzeichnis besteht!
                
    if(is_dir($dir)) {
                    return 
    true;                  
                } else {
                    return 
    false;
                }
            }
             
    #dircreate => erstelle das Verzeichnis
            
    function dircreate($dir) {

                
    // wir haben nix zu tun, wenn es exitiert
                
    if ($this->dircheck($dir)) return;

                
    chdir($dir);

                
    // erstelle das Verzeichnis und springe mit oder ohne Erfolg zurück
                
    return mkdir($_COOKIE[sitlog], 0777);
            } 
    Du mußt natürlich sicherstellen, daß der Pfad in $dir innerhalb der elaubten Vezeichnisse liegt.

    Pingu

    EDIT: Wenn Du mit safe mode und basedir Restriktionen arbeitest, dann lege ich Dir noch zwei andere Funktionen ans Herz: move_uploaded_file() und is_uploaded_file().
    Geändert von Pingu (19-04-2005 um 07:34 Uhr)
    Homepage: www.pingu.info

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •