Seite 1 von 2

Download - Modul - Stefan Seifarth

Verfasst: Di 21. Mär 2006, 15:17
von tbuerdel
Hallo Leute

Ich benutze das Download-Modul von Stefan Seifarth und hab dazu eine kurze Frage:

Wäre es denkbar den Code so anzupassen, das sich die Downloadliste, resp. die Download-Seite beim Aufruf selber aktualisert? Hat das evt. schon jemand realisert?

Warum die Frage, ich möchte die zu downloadenden Files per FTP ins upload-dir laden ohne eine Contendo-Session machen zu müssen ;-)


gruss an die community

Verfasst: Di 21. Mär 2006, 16:42
von stese
das geht leider nicht ganz so einfach ...
im prinzip müsste man erst einmal das komplette verzeichnis einlesen - danach jedes element mit bereits vorhandenen datenbank einträgen vergleichen und bei bedarf die nicht vorhandenen daten der datenbank hinzufügen - erst dann darf die liste ausgegeben werden - das wäre in etwa eine verdopplung des quellcodes der liste ... machbar ist alles, nur ist der aufwand derzeit bei mri zu groß um es nebenbei schnell mal hinzuschreiben

Verfasst: Di 21. Mär 2006, 17:20
von phpchris
Also ich habe so ein Modul mal geschrieben.

Input

Code: Alles auswählen

/**
 * Download aus Upload-Verzeichnis
 *
 * INPUT
**/


?>
<table cellspacing="0" cellpadding="0" cellpadding="4">

    <tr>
        <td style="font-size:11px">Upload-Zweig:</td>
        <td>
            <select name="CMS_VAR[0]">
            <option value="0"></option>
            <?php

                $sql = "SELECT DISTINCT dirname from ".$cfg["tab"]["upl"];

                $db->query($sql);

                while ( $db->next_record() ) {

$upload_dir=substr_replace($db->f("dirname"),'',(strlen($db->f("dirname"))-1));

                    if ( "CMS_VALUE[0]" == $upload_dir) {
                        echo '<option selected="selected" value="'.$upload_dir.'">'.$db->f("dirname").'</option>';

                    } else {
                        echo '<option value="'.$upload_dir.'">'.$db->f("dirname").'</option>';

                    }
                }

            ?>
            </select>
        </td>
    </tr>
<?php
Output:

Code: Alles auswählen

<?php
//Variablen deklarieren und Werte zuweisen
$DAA_CUR_DIR = $_GET['DAA_CUR_DIR'];
$_DAA_STARTPATH_INTERNAL = $cfgClient[$client]['upl']['path'].CMS_VALUE[0];
$_DAA_STARTPATH_EXTERNAL = $cfgClient[$client]["htmlpath"]["frontend"] . $cfgClient[$client]["upload"];

if($DAA_CUR_DIR == "")
{
  $_PARAM = $_DAA_STARTPATH_INTERNAL;
}
else
{
  $_PARAM = $_DAA_STARTPATH_INTERNAL."/".$DAA_CUR_DIR;
}

//Klasse instanziieren
$_DAA = new daa_download($cfgClient[$client]["upload"], $cfgClient[$client]["htmlpath"]["frontend"], $_DAA_STARTPATH_INTERNAL);

if($_GET['DAA_GET_FILE'] == "")
  {
    $_DIR_CONTENT_ARRAYS  = $_DAA->daa_get_dir_content($_PARAM);
  }
else
  {
    $_DAA->daa_download_file($_GET['DAA_GET_FILE']);
  }

$_DIR_ARRAY           = $_DAA->_DAA_MULTI_ARRAY['dirs'];
$_FILE_ARRAY          = $_DAA->_DAA_MULTI_ARRAY['files'];

$_HTML = $_DAA->daa_generate_download_html($_DIR_ARRAY, "yes");
$_HTML .= $_DAA->daa_generate_download_html($_FILE_ARRAY, "no");

if($_HTML == "")
  $_HTML = "Das Verzeichnis ist leer.";

$_HTML  = "<table width='100%'>".$_HTML;
$_HTML .= "<tr><td colspan='2'>&nbsp;</td></tr>";
if($_GET['DAA_CUR_DIR'] != "")
  $_HTML .= "<tr><td colspan='2' align='left'><a href='javascript:history.back()'>Zur&uuml;ck</a></td></tr>";
$_HTML .= "</table>";
echo $_HTML;

//////////////////////////////////////////////////////////////////////////////////////////
/* Funktionen
*/
class daa_download{

   var $_DAA_MULTI_ARRAY = array();
   var $_DAA_HTML;
   var $DAA_upl_path;
   var $DAA_frontend_path;
   var $_DAA_internal_path;

function daa_download($upl_path, $html_path, $internal_path)
{
  $this->DAA_upl_path = $upl_path;
  $this->DAA_frontend_path = $html_path;
  $this->DAA_internal_path = $internal_path;
}

//Verzeichnisinhalt auslesen
function daa_get_dir_content($_DIRECTORY)
{
  $_DAA_DIR_HANDLER = dir($_DIRECTORY);
  $_DAA_DIR_ARRAY   = array();
  $_DAA_FILE_ARRAY  = array();

    while($_DAA_CONTENT = $_DAA_DIR_HANDLER->read())
    {
      if(is_dir($_DIRECTORY."/".$_DAA_CONTENT) && $_DAA_CONTENT != "." && $_DAA_CONTENT != "..")
      {
        array_push($_DAA_DIR_ARRAY, $_DAA_CONTENT);
      }
      if(is_file($_DIRECTORY."/".$_DAA_CONTENT))
      {
        array_push($_DAA_FILE_ARRAY, $_DAA_CONTENT);
      }
    }
    $this->_DAA_MULTI_ARRAY['dirs']  = $_DAA_DIR_ARRAY;
    $this->_DAA_MULTI_ARRAY['files'] = $_DAA_FILE_ARRAY;
    return $this->_DAA_MULTI_ARRAY;
}

//HTML-Code generieren
function daa_generate_download_html($_ARRAY, $is_dir_array)
{
 $this->_DAA_HTML = "";
 foreach($_ARRAY as $value)
 {
   if($is_dir_array == "yes")
   {
     $this->_DAA_HTML .= "<tr>\n";
     $this->_DAA_HTML .= "<td>\n";
     $this->_DAA_HTML .= "<a href='".$this->DAA_frontend_path."front_content.php?idcat=".$_GET['idcat']."&DAA_CUR_DIR=".urlencode($value)."' class='visited'>".$value."</a>";
     $this->_DAA_HTML .= "</td>\n";
     $this->_DAA_HTML .= "<td>\n";
     $this->_DAA_HTML .= "</td>\n";
     $this->_DAA_HTML .= "</tr>\n";
   }
   else
   {
     $filesize = filesize($this->DAA_internal_path."/".$_GET['DAA_CUR_DIR']."/".$value);
     $this->_DAA_HTML .= "<tr>\n";
     $this->_DAA_HTML .= "<td align='left'>\n";
     $this->_DAA_HTML .= "<a href='".$this->DAA_frontend_path."download.php?DAA_GET_FILE=".urlencode($value)."&DAA_GET_PATH=".$this->DAA_upl_path.CMS_VALUE[0]."/".$_GET['DAA_CUR_DIR']."/' class='visited'>".$value."</a>";
     $this->_DAA_HTML .= "</td>\n";
     $this->_DAA_HTML .= "<td align='right'>\n";
     $this->_DAA_HTML .= round(($filesize / 1024), 1)." KBytes";
     $this->_DAA_HTML .= "</td>\n";
     $this->_DAA_HTML .= "</tr>\n";
   }
 }
 return $this->_DAA_HTML;
}


/* Ende Funktionen
*/
}
//////////////////////////////////////////////////////////////////////////////////////////
?>
Dann brauchst du noch eine Datei namens download.php, die direkt im Ordner /cms liegen sollte:

Code: Alles auswählen

<?php
@include("../contenido/includes/config.php");


if($_GET['DAA_GET_FILE'] != "")
{
  $file = $_GET['DAA_GET_FILE'];
  $len = filesize($cfg['path']['frontend'] ."/".$_GET['DAA_GET_PATH'].$file);
  $ext = substr($file, 0, (strlen($file)-3));
   switch( $ext ){
     case "pdf": $ctype="application/pdf";              break;
     case "exe": $ctype="application/octet-stream";      break;
     case "zip": $ctype="application/zip";              break;
     case ".gz": $ctype="application/zip";              break;
     case "tar": $ctype="application/zip";              break;
     case "rar": $ctype="application/zip";              break;
     case "zip": $ctype="application/zip";              break;
     case "doc": $ctype="application/msword";            break;
     case "xls": $ctype="application/vnd.ms-excel";      break;
     case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
     case "gif": $ctype="image/gif";                    break;
     case "png": $ctype="image/png";                    break;
     case "jpg": $ctype="image/jpg";                    break;
   default:    $ctype="application/force-download";
  }

   if(strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
    {
    $attachment = "";

    if($content_type == "")
      $content_type = "application/force-download;";
    }
   else
    {
    $attachment = "attachment;";
    $content_type = "application/octet-stream";
    }
    header("Expires: Mon, 26 Jul 2001 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    header("Cache-control: private");
    header("Content-type: ".$ctype."");
    header("Content-Disposition:attachment; filename=$file");
    header("Content-Transfer-Encoding: binary");
    header("Expires: 0");
    header("Content-Length: ".$len);
    readfile($_GET['DAA_GET_PATH'].$file);
}
?>

...

Verfasst: Di 21. Mär 2006, 18:39
von tbuerdel
Krass!!!

Ich werd das Heute noch ausprobieren und feedbacken ;-)

Danke vorerst schon mal

trouble

Verfasst: Mi 22. Mär 2006, 15:19
von tbuerdel
Hallo Chris

Ich hab das ausprobiert.....
Download.php in den Root CMS, Modul mir Input /Output erstellt, Template mit Download-Modul erstellt und dann Artikel mit dem entsprechenden Template.

Leider: dir: Invalid argument in D:\root\front_content.php(791) : eval()'d code on line 218


Nachtrag: Die Anzeiger der Verzeichnisse funktioniert, das anzeigen der File-Liste jedoch nicht

cheers

Verfasst: Mi 22. Mär 2006, 15:56
von phpchris
Geht die Konfiguration denn?

..aha

Verfasst: Mi 22. Mär 2006, 17:18
von tbuerdel
Hi

Danke der Nachfrage, ja die Kofiguration geht, ich hab geschnallt was nicht geht, und zwar ein verzecihnis mit unterverzeichnis (z.B download/test/) kann in der Konfig angegeben werden, aber die Seite bringt den oben erwähneten Fehler.


Vielleicht eine Idee woran das liegt?

...

Verfasst: Mi 22. Mär 2006, 17:30
von tbuerdel
wenn ich in der downloadseite dann navigiere..... verzeichnis höher, verzeichnis tiefer, dann kommen irgendwann mal doppelte (//) Slashes rein und die meldung "upload//fremdde): failed to open dir: Invalid argument in"

Die Errors lassen sich mit error_reporting(0); im Output-Bereich ausschalten.... nunja, nicht sexy, aber es geht ;-)


Wenn ich ein Upload-Dir mit Dateien drinn angeben, ist die Sache perfekt, wenn das Dir, welches ich angebe leer ist, dann wird die Seite nicht korrekt angezeigt, gebe ich ein Dir (z.b download/test/ an, dann wird das Root angezeigt... schnall es irgendwie nicht

Verfasst: Mi 22. Mär 2006, 17:53
von phpchris
Hmm... verstehe ich irgendwie jetzt grad auch nicht...
Ich habe das Modul noch im Einsatz bei einem Kunden.
Werde morgen mal das Original-Modul rauskopieren...

Sorry, aber ich komme da jetzt nicht ran!

Verfasst: Do 18. Mai 2006, 14:10
von Flex32
Frage:
wie kann man da ne art downloadbeschreibung einbauen, also wo ich eine satzt oder so dazu schreiben kann, was man sich da runterläd?

gruß

Verfasst: Do 18. Mai 2006, 19:16
von stese
welche download liste meinst du? die von phpchris oder meine?

bei meiner ist das schon drinnen, du musst nur im beschreibungsfeld der datei was eingeben.

Verfasst: Fr 19. Mai 2006, 10:33
von Flex32
das von phpchris

Verfasst: Fr 19. Mai 2006, 13:06
von Flex32
hat den niemand ne Idee?

Verfasst: Fr 19. Mai 2006, 13:20
von Dalamar
Ich bin mir nicht sicher, ob Du den gleichen Fehler hast wie ich... aber mein Problem habe ich wie folgt gelöst

Ersetze folgenden Code im Output

Code: Alles auswählen

$this->_DAA_HTML .= "<a href='".$this->DAA_frontend_path."download.php?DAA_GET_FILE=".urlencode($value)."&DAA_GET_PATH=".$this->DAA_upl_path.CMS_VALUE[0]."/".$_GET['DAA_CUR_DIR']."/' class='visited'>".$value."</a>";
durch

Code: Alles auswählen

$this->_DAA_HTML .= "<a href='".$this->DAA_frontend_path."download.php?DAA_GET_FILE=".urlencode($value)."&DAA_GET_PATH=".$this->DAA_upl_path.CMS_VALUE[0]."/".$_GET['DAA_CUR_DIR']."' class='visited'>".$value."</a>";
Hoffe es funzt. ;)

Gruss,
Christian

Verfasst: Fr 19. Mai 2006, 13:43
von Flex32
danke, aber was soll das bewirken?
ich möchte doch eine Downlaodbeschreibung eingeben können......