Lnk-uri de Download in Script Multi-Uploader

Aici prezentati probleme, intrebari, sau orice subiecte legate de scripturi si tutoriale de pe site.
Komfort
Mesaje:157

Lnk-uri de Download in Script Multi-Uploader

Buna ziua,
Imi merge scrptul de upload de pe siteul dvs. ( Script Multi-Uploader ), dar nu stiu cum sa fac sa am o sectiune de unde pot downloada tot ce am uploadat, in fisierul upload.
Multumesc.

MarPlo Mesaje:4343
O solutie usoara este sa adaugi link-urile intr-un fisier, atunci cand se face Upload, apoi, in pagina unde vrei sa afisezi link-urile de download incluzi /citesti datele din acel fisier.
Incearca fisierul "uploader.php" asa:

Cod: Selectaţi tot

<?php
/***   Script de la:   https://marplo.net/php-mysql/   ***/

$updir = 'upload';    // Directorul pt. upload
$max_size = 500;      // Marimea maxima, in KiloBytes, care este permisa
$file_links = $updir. '/links.htm';        // retine link-urile pt. fisierele incarcate
$links = '';          // retine link-urile adaugate in "links.htm"

// Seteaza matricea cu tipurile de fisiere permise
$allowtype = array('bmp', 'flv', 'gif', 'jpg', 'jpeg', 'mp3', 'pdf', 'png', 'rar', 'zip');

// Creaza directorul din $updir (cu CHMOD 077), daca nu exista
if (!is_dir($updir)) mkdir($updir, 0777);

/** Incarcarea imaginii pe server **/

$rezultat = array();
// Daca este primit din formular un fisier valid
if (isset ($_FILES['file_up'])) {
  // Seteaza pt. upload fisierele primite (pot fi primite din mai multe campuri 'file_up')
  for($f=0; $f<count($_FILES['file_up']['name']); $f++) {
    // Verifica daca fisierul are tipul de extensie permis
    $split = explode('.', strtolower($_FILES['file_up']['name'][$f]));
    $type = end($split);
    if (in_array($type, $allowtype)) {
      // Verifica daca fisierul are marimea permisa
    if ($_FILES['file_up']['size'][$f]<=$max_size*1000) {
        // Daca nu sunt erori in procesul de copiere
        if ($_FILES['file_up']['error'][$f]==0) {
          // Seteaza locatia si numele pt. incarcare pe server
          $thefile = $updir . "/" . $_FILES['file_up']['name'][$f];
          // Daca fisierul nu poate fi incarcat, returneaza mesaj
          if (!move_uploaded_file ($_FILES['file_up']['tmp_name'][$f], $thefile)) {
            $rezultat[$f] = ' Fisierul nu a putut fi copiat, incercati din nou';
          }
          else {
            // Retine numele fisierului incarcat
            $rezultat[$f] = '<b>'.$_FILES['file_up']['name'][$f].'</b>';
            $links .= '<a href="' .$thefile. '" title="'. $_FILES['file_up']['name'][$f]. '">'. $_FILES['file_up']['name'][$f]. '</a><br/>';
          }
        }
      }
    else { $rezultat[$f] = 'Fisierul <b>'. $_FILES['file_up']['name'][$f]. '</b> depaseste marimea permisa de maxim <i>'. $max_size. 'KB</i>'; }
    }
    else { $rezultat[$f] = 'Fisierul <b>'. $_FILES['file_up']['name'][$f]. '</b> nu are tipul de extensie permis'; }
  }

   // Returneaza rezultatul
  $rezultat2 = implode('<br /> ', $rezultat);
  file_put_contents($file_links, $links, FILE_APPEND | LOCK_EX);
  echo '<h4>Fisiere incarcate:</h4>'.$rezultat2;
}
?>
Link-urile sunt salvate in "links.htm", tot in directorul "upload/".
Si pot fi incluse intr-o pagina PHP cu acest cod:

Cod: Selectaţi tot

file_get_contents('upload/links.htm');

Komfort Mesaje:157
Daca sunt pe "localhost" nu pot face downlaod pt test?
Am facut cum ai zis, apar linkurile pt downlod in "links.htm", cand dau click pe ele nu le pot downloada.
Multumesc

MarPlo Mesaje:4343
Poti deschide fisierul "links.htm" cu Notepad (sau alt editor simplu) sa vezi cum sunt, ele sunt cu adresa relativa (adica fara "http://") la directorul "upload". Deci pagina in care incluzi link-urile trebuie sa fie in directorul in care e si "upload/".
Daca vrei altfel adresa link-ului, poti modifica cum stii acest cod in script:

Cod: Selectaţi tot

$links .= '<a href="' .$thefile. '" title="'. $_FILES['file_up']['name'][$f]. '">'. $_FILES['file_up']['name'][$f]. '</a><br/>';

Komfort Mesaje:157
da..links.html este in upload...si il deschid cu notepad si vad acolo frumos linkurile toate....problema e atunci cadn intru pe localhost si incerc sa le downloadez nu pot...poate ca sunt pe localhost?:(

MarPlo Mesaje:4343
Cred ca nu cionteaza ca esti pe "localhost", probabil depinde de tipul fisierelor.
Link-ul doar deschide adresa respectiva din el. Daca e fisier care poate fi deschis in browser, nu apare pt descarcare ci incearca sa-l deschida direct.
Pt a forta download-ul e mai complicat, si nu are legatura cu acest script de upload.
Link-urile ar trebui sa deschida un alt script PHP, ca acesta (denumit "download.php", unde e si "uploder.php"):

Cod: Selectaţi tot

<?php
// Daca exista $_GET['d'], preia numele fisierului si forteaza download
if(isset($_GET['d'])) {
 $pag_dl = strip_tags(urldecode($_GET['d']));
 header('Content-type: application/force-download');
 header('Content-disposition: attachment; filename='.$pag_dl);
 readfile($pag_dl);
 exit;
}
?>
In adresa URL din link catre acest script se adauga numele /calea fisierului ce trebuie descarcat, la "...php?d=fisier_pt_download".

Cod: Selectaţi tot

$links .= '<a href="download.php?d=' .urlencode($thefile). '" title="'. $_FILES['file_up']['name'][$f]. '">'. $_FILES['file_up']['name'][$f]. '</a><br/>';