Download - Modul - Stefan Seifarth

tbuerdel
Beiträge: 24
Registriert: Sa 9. Aug 2003, 20:08
Kontaktdaten:

Download - Modul - Stefan Seifarth

Beitrag 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
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag 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
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag 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);
}
?>
tbuerdel
Beiträge: 24
Registriert: Sa 9. Aug 2003, 20:08
Kontaktdaten:

...

Beitrag von tbuerdel »

Krass!!!

Ich werd das Heute noch ausprobieren und feedbacken ;-)

Danke vorerst schon mal
tbuerdel
Beiträge: 24
Registriert: Sa 9. Aug 2003, 20:08
Kontaktdaten:

trouble

Beitrag 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
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag von phpchris »

Geht die Konfiguration denn?
tbuerdel
Beiträge: 24
Registriert: Sa 9. Aug 2003, 20:08
Kontaktdaten:

..aha

Beitrag 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?
tbuerdel
Beiträge: 24
Registriert: Sa 9. Aug 2003, 20:08
Kontaktdaten:

...

Beitrag 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
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag 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!
Flex32
Beiträge: 175
Registriert: Mi 17. Nov 2004, 13:23
Kontaktdaten:

Beitrag 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ß
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag 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.
Flex32
Beiträge: 175
Registriert: Mi 17. Nov 2004, 13:23
Kontaktdaten:

Beitrag von Flex32 »

das von phpchris
Flex32
Beiträge: 175
Registriert: Mi 17. Nov 2004, 13:23
Kontaktdaten:

Beitrag von Flex32 »

hat den niemand ne Idee?
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag 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
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
Flex32
Beiträge: 175
Registriert: Mi 17. Nov 2004, 13:23
Kontaktdaten:

Beitrag von Flex32 »

danke, aber was soll das bewirken?
ich möchte doch eine Downlaodbeschreibung eingeben können......
Gesperrt