Autor Zpráva
nightrider
Profil
Dělám si fotoalbum a když jsem si dělal stáhnutí složky s fotkama, tak jsem zjistil že by si každej mohl stáhnout vše co mám na stránce :-) Ví někdo kde je chyba? Děkuju

$dir="./".urldecode($_GET["dir"])."/";
$zip = new zipfile();
$adr=Dir($dir);
while ($file=$adr->Read()){
  if (!(($file==".")||($file=="..")||($file=="index.php")||($file=="info.txt"))){
    if (!StrStr($file,"thumb.jpg")) $files[]="$file";
  }
}
$adr->Close();
@Sort($files);
$max=SizeOf($files);
$file_info="";
for ($i=0;$i<$max;$i++){
  $filename=$dir . $files[$i];
  if (@is_dir($filename)){
  } else {
    $f=@FOpen($filename,"rb");
    $add_to_zip = @fread ($f, filesize ($filename));
    //echo "Zip<br>$filename (".filesize($filename).")<br>$add_to_zip<hr>";
    @FClose($f);
    $file_info.="$filename - " . Round((FileSize($filename)/1024),2) . " kB\r\n";
    $zip->addFile($add_to_zip, "$files[$i]");
   }
}
$info.=$file_info . "\r\n\r\n------------------------------\r\n";
$info.="Stazeno\r\n";
$zip->addFile($info, "info.txt");
$zip_name="fotky.zip";
header("Content-Type: application/x-zip");
header("Content-disposition: attachment; filename=$zip_name");
echo $zip->file();
jogurt
Profil
Chyba bude asi primo v principu, kdyz tam mas jako vstup cestu, kterou to ma stahnout. Ta pak muze byt treba "../../" a zabali se a odevzda vsechno od -2 urovne.
Reseni bude nejak osetrit ten vstupni parametr. Nejlepe asi porovnavat ho s nejakym indexem povolenych polozek.
nightrider
Profil
Nevíte jak přesně? Já to dělám prvně a jsem stoho pafff :-(
jogurt
Profil
V tom prvnim radku se definuje promenna $dir. Ta potom predstavuje adresu toho adresare, ktery se ma zabalit.
Ta promenna se slozi z ./ a $_GET[dir] a /
V $_GET[dir] je hodnota, ktera se pise v GET parametru (v adrese), napriklad: index.php?dir=fotky.
Pokud potrebujete ten skript jenom jednoucelove, chcete nechat stahnout jenom adresar fotky, pak bude nejjednodussi nahradit ten prvni radek:
$dir="./fotky/";
nightrider
Profil
Právě že to má bejt na všechny alba :-( tahám to s db a v databázi mám cestu a jméno souboru
je tam složka fotoalbum ve který mám další složky a právě i ten kódík na stahování.

Vím že to je prasárna,ale jinak jsem to nesvedl:
dotaz vypadá nějak takhle: where id_alba=parent
tím si zavolám cestu k souboru a jméno

potom to samé dělám i na stahování :-(
jogurt
Profil
Kdyz teda mate v DB ty adresare, tak udelejte dotaz, ktery Vam je vybere:
$dotaz=mysql_query("SELECT id_alba FROM tabulka GROUP BY id_alba"); //ten GROUP BY pokud ovsem mate vse v jedne tabulce
while($album=mysql_fetch_array($dotaz)){ //probira vysledky dotazu
      if($dir=="./".$album["id_alba"]."/"){ //kdyz najde pozadovany adresar mezi ID alb, zastavi probirani...
            $je_to_album=true;
            break;
      }
}
if(!$je_to_album) die("CHYBA - Nekorektni ID alba.");

Tenhle kod zkuste dat mezi prvni a druhy radek Vaseho skriptu.
nightrider
Profil
To vyhazuje chybu :-(

Warning: mysql_query() [function.mysql-query]: Access denied for user 'www-data'@'localhost' (using password: NO) in /home/free/root/www/fotoalbum/download.php on line 5

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/free/root/www/fotoalbum/download.php on line 5

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/free/t/ on line 6
CHYBA - Nekorektni ID alba.
nightrider
Profil
...
jogurt
Profil
Aha, nevedel jsem, ze nejste prihlaseny do DB. Pred pristupem do DB se musite pripojit a vybrat databazi:
mysql_connect(host,prihlasovaci_jmeno,heslo);
mysql_select_db(nejaka_db);
nightrider
Profil
no jo, já tam neměl includ na připojení :-) jsem byl nějak už unavenej,ale ted to díky Vám maká jak má a bez možnosti obcházení :-) Děkuju Vám moc za radu i čas.
Toto téma je uzamčeno. Odpověď nelze zaslat.