Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/10/2008, 08:34
bescale
 
Fecha de Ingreso: octubre-2008
Mensajes: 5
Antigüedad: 18 años
Puntos: 0
Busqueda "problemilla" con un Script que estoy probando...

Hola Gentes primero felicitarles por este rincón de información.

Tengo un "problemilla" con un Script que estoy probando...
W2box "sirve para crear carpetas y subir archivos a un servidor"

El path que me crea la carpeta parece no ser correcto porque me la crea en un lugar que no corresponde con el link que luego usa para abrirla.

Por si me he explicado mal o tenéis dudas la consulta seria:

http://www.marlugue.com/book/upload ( no me dejaba )

Aquí dejo el código por si alguien me pudiera echar un a mano:

Código PHP:
<?php

require("config.php");


$dir = (isset($_GET['d']))?$_GET['d']:$_POST['d'];

if (
$dir && $config['enable_folder_maxdepth']){
    
$dir = split("/",$dir);
    foreach (
$dir as $k => $v) {
        if ((
$v == "..") || ($v == ".") || ($v == "")) unset($dir[$k]);
    }
    
$path = $config['storage_path'];
    foreach (
$dir as $k => $v) {
        if (!
file_exists($path."/$v"))
            unset(
$dir[$k]);
        else
            
$path .= "/$v";
    }
    
$config['storage_path'] .= "/".join("/",$dir);
    
    if (isset(
$dir)) $dirlevel = sizeof($dir); else $dirlevel = 0;
} else
    unset(
$dir);


//authentication
$auth = !$config['admin_actived'];
authorize(true); //silent authorize first
if (isset($_GET["admin"])) {
    
authorize();
    
Header("Location: ".rooturl());
}

//bruteforce php ini, almost never work except on old php..
ini_set('post_max_size','500M') ;
ini_set('upload_max_filesize','500M');
ini_set('memory_limit','500M');
//find real max_filesize
$max_filesize = $config['max_filesize'] * pow(1024,2);

if (!
$config['upload_progressbar']) //doesn't apply with the perl script
    
$max_filesize = min(return_bytes(ini_get('post_max_size')),return_bytes(ini_get('upload_max_filesize')),return_bytes(ini_get('memory_limit')),$max_filesize);


    
// deleting
if (isset($_POST["delete"])) {
    if (
$config['protect_delete']) authorize();
    
deletefile($_POST["delete"]);
}

function 
deletefile($cell){
    global 
$config, $lang;

    
//decode str
    
$str=stripslashes(urldecode($cell));
    
$str=substr($str, strpos($str,'href="')+6);
    
$str=substr($str,0, strpos($str,'"'));
    
$file = $config['storage_path'].'/'.basename($str);

    if (!
file_exists($file))
    echo 
$lang['delete_error_notfound']." ($file)";
    else {
        if (
is_dir($file))
            
$return = @rmdir($file);
        else 
            
$return = @unlink($file);
        
        if (
$config['log_delete']) logadm($lang['DELETE']." ".$file);
        if (
$return) 
            echo 
"successful"; 
        else { 
            if (
is_dir($file))
                echo 
$lang['delete_error_cant_dir'];
            else
                echo 
$lang['delete_error_cant'];
        }
    }
    exit;
}

//progress bar notification
if (isset ($_POST['progress'])) {
    
//define filenames
    
$sessionid = basename($_POST['progress']);
    
$tmp_dir = $config['upload_tmpdir'];
    
$error_file = $tmp_dir."/$sessionid"."_err";
    
$signal_file = $tmp_dir."/$sessionid"."_signal";
    
$info_file = $tmp_dir."/$sessionid"."_flength";
    
$data_file = $tmp_dir."/$sessionid"."_postdata";

    if(!
file_exists($tmp_dir)) {
        
header("HTTP/1.1 500 Internal Server Error");
        echo 
"tmp directory is invalid!";
    } else if(
file_exists($error_file)) {
        
# Send error code if error file exists
        
header("HTTP/1.1 500 Internal Server Error");
        echo 
file_get_contents($error_file);
        
//clean the shit
        
$files = array($info_file,$data_file,$error_file,$signal_file);
        foreach(
$files as $file) {
            if(
file_exists($file)) {
                
unlink($file);
            }
        }
    } else if (
file_exists($signal_file)) {
        echo 
"FINISHED";
    } else if (
file_exists($info_file)){
        
$total = file_get_contents($info_file);
        
$current = @filesize($data_file);
        echo 
intval(($current / $total) * 100);
    }
    else echo 
'0';
    exit;
}

//progressbar upload
if ($config['upload_progressbar']){
    if (isset(
$_GET['sid'])) {
        
$sid = $_GET['sid'];
        
$tmp_dir = $config['upload_tmpdir'];
        
$sid = ereg_replace("[^a-zA-Z0-9]","",$sid);//clean sid
        
$file = $tmp_dir.'/'.$sid.'_qstring';
        if(!
file_exists($file)) {
            
$errormsg = $lang['upload_error_sid'];
        } else {
            
$qstr = join("",file($file));
            
//parse_str($qstr);
            
parse_str($qstr, $_POST);            

            
//cleaning shit
            
$exts = array("_flength","_postdata","_err","_signal","_qstring");
            foreach(
$exts as $ext) {
                if(
file_exists("$tmp_dir/$sid$ext")) {
                    @
unlink("$tmp_dir/$sid$ext");
                }
            }
            
            
//setting vars like without progressbar
            
$_FILES['file']['name']=basename($_POST['file']['name']['0']);
            
$_FILES['file']['size']=$_POST['file']['size']['0'];
            
$_FILES['file']['tmp_name']=$_POST['file']['tmp_name']['0'];
        }
    } else if (isset(
$_POST['errormsg'])) {
        
$errormsg = urldecode($_POST['errormsg']);
        if (
$errormsg =="The maximum upload size has been exceeded")
        
$errormsg = $lang['upload_error_sizelimit'].' ('.getfilesize($max_filesize).').';
    }
}

//uploading
if (isset($_FILES['file'])) {
    if (
$config['protect_upload']) authorize();
    
uploadfile($_FILES['file']);
}

function 
uploadfile($file) {
    global 
$config, $lang, $max_filesize, $errormsg,$dir;

    if (
$file['error']!=0) {
        
$errormsg = $lang['upload_error'][$file['error']];
        return;
    }

    
//determine filename
    
$filename=$file['name'];
    if (isset(
$_POST['filename']) && $_POST['filename']!="") $filename=$_POST['filename'];
    
$filename=basename($filename);
    
$filename=explode(".",basename($filename));
    
$ext = $filename[count($filename)-1];
    unset(
$filename[count($filename)-1]);
    
$filename=join('_',$filename).'.'.$ext;
    
    if (!
in_array(strtolower(extname($filename)), $config['allowed_ext'])) {
        
$errormsg = $lang['upload_badext'];
        return;
    }

    
$filesize=$file['size'];
    if (
$filesize > $max_filesize) {
        @
unlink($file['tmp_name']);
        
$errormsg = $lang['upload_error_sizelimit'].' ('.getfilesize($max_filesize).').';
        return;
    }

    
$filedest = $config['storage_path'].'/'.$filename;
    if (
file_exists($filedest) && !$config['allow_overwrite']) {
        @
unlink($file['tmp_name']);
        
$errormsg = "$filename ".$lang['upload_error_fileexist'];
        return;
    }

    
$filesource=$file['tmp_name'];
    if (!
file_exists($filesource)) {
        
$errormsg = "$filesource do no exist!";
        return;
    } else if (!
move_uploaded_file($filesource,$filedest)) {
        if (!
rename($filesource,$filedest)) {
            
$errormsg = $lang['upload_error_nocopy'];
            return;
        }
    }

    if  (
$errormsg=="") {
        
chmod ($filedest, 0755);
        if (
$config['log_upload']) logadm($lang['UPLOAD'].' '.$filedest);
        
$loc = rooturl();
        if (
sizeof($dir)>0) $loc .= join("/",$dir)."/";
        
Header("Location: ".$loc);
        exit;
    }
}

//make dir
if (isset ($_POST['dir'])) {
    if (
$config['protect_makedir']) authorize();
    if (
$dirlevel < $config['enable_folder_maxdepth']) {
        
$newdir = preg_replace("/[^0-9a-zA-Z\(\)\s]/i",'', $_POST['dir']);
        if (
$newdir <> "") {
            
$newdir = $config['storage_path']."/".$newdir;
            if (
file_exists($newdir))
                
$errormsg = $lang['make_error_exist'];
            else {
                if (
mkdir($newdir)) {
                    
$loc = rooturl();
                    if (
sizeof($dir)>0) $loc .= join("/",$dir)."/";
                    
Header("Location: ".$loc);
                    exit;
                } else
                    
$errormsg = $lang['make_error_cant'];
            }
        }
    } else {
        
$errormsg = $lang['make_error_maxdepth'];
    }
}

Gracias

Última edición por bescale; 23/10/2008 a las 11:19 Razón: titulo nuevo