Avatar billede dotcom1 Nybegynder
07. september 2005 - 15:22 Der er 1 løsning

Ændre script til array af mapper

Jeg har dette force download-script, som virker fint. Af sikkerhedsmæssige årsager er det lavet, så man kun kan bruge det i den mappe, der angives i scriptet. Jeg kunne dog godt tænke mig at det kunne ændres, så man kunne angive et array af mapper, som det kan virke i. kan man det? Lige nu har jeg en kopi af dette script i hver af de (tre) mapper, jeg har brug for det i, og det er lidt problematisk hvis man f.eks. vil lave en MySQL-søgefunktion, hvor resultaterne skal være hyperlinks: echo "<a href='mappeNavn/downloads.php?file=$row[name]' class=\"plain\">$row[titel]</a><br>"; Søgningen foregår jo i alle tre mapper, men jeg er nødt til at angive en absolut stil i a href-tagget til nedenstående script... Håber, det er forståeligt.

downloads.php:
<?php
### Force download script. Save as downloads.php
### Link like this: http://www.site.com/downloads.php?file=doc.pdf
### Create MySQL table query
/*
CREATE TABLE `downloads` (
  `ID` tinyint(4) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '0',
  `titel` text NOT NULL,
  `kategori` varchar(255) NOT NULL default '0',
  `downloads` int(4) NOT NULL default '0',
  `date` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=20 ;
*/
### config variables.
include_once($_SERVER['DOCUMENT_ROOT']."/sql.php");
$config=array();
$config['email'] = 'mail@domain.dk';
$config['file_path']=$_SERVER['DOCUMENT_ROOT'].'/mappeNavn'; //No Trailing Slash!
$config['allowed_files']=array('doc','txt','pdf','zip','wmv','mpeg','jpg');
$config['PHP_SELF']='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

function download($path,$file)
{
    global $config;
    header("Expires: 0");
    header("Content-Transfer-Encoding: binary");
    header("Cache-Control: no-cache, must-revalidate");
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$file);
    header('Content-Length: '.filesize($path.'/'.$file));
    readfile($path.'/'.$file) OR error('Error Reading File');
}

### Get downloadable file by id one at the time
function makeDownloadLink($id){
global $conn;
$result = mysql_query("SELECT name, downloads FROM downloads WHERE ID='$id'",$conn);
$result = mysql_fetch_row($result);
return $result;
}

function error($text)
{
    global $config;
    $out = '<p align="center" style="font:12pt Arial"><br><br><br>Fatal Error: <b>'.$text.'</b></p>'."\n";
    mail($config['email'],'File Download Error Report',$out,'From: errors@'.str_replace('www.','',$_SERVER['HTTP_HOST'])."\r\n".'Content-Type: text/html'."\r\n");
    exit($out);
}

$file=(isset($_GET['file']) && $_GET['file']!='') ? $_GET['file'] : null;

if($file)
{
    if(strpos($file,'..')!==false || strpos($file,'/')!==false) error('Access Denied ('.$file.')');
    if(!in_array(substr(strrchr($file,'.'),1),$config['allowed_files'])) error('You do not have access to this type of file! ('.$file.')');
    if(!is_file($config['file_path'].'/'.$file)) error('File "'.$file.'" is not avaliable!');
    $result=mysql_query("SELECT * FROM `downloads` WHERE name='$file'",$conn) OR error('MySQL Query Failed: '.mysql_error());
    $query=(mysql_num_rows($result) === 0) ? "INSERT INTO downloads (ID, name, downloads, date) Values ('', '$file', '1', '".date("Y-m-d H:i")."')" : "UPDATE downloads SET downloads = downloads+1 WHERE name='$file'";
    mysql_query($query,$conn);
    download($config['file_path'],$file);
    mysql_close($conn);
}

?>

Mvh.
Avatar billede dotcom1 Nybegynder
07. september 2005 - 17:20 #1
Arh pyt. Finder på noget andet. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester