Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/10/2008, 08:34
bescale
 
Fecha de Ingreso: octubre-2008
Mensajes: 5
Antigüedad: 16 años, 4 meses
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($strstrpos($str,'href="')+6);
    
$str=substr($str,0strpos($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 ($filedest0755);
        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