Wie bekommt man solchen Captcha?

Also du hast ein Formular z.B. in index.php, das auf "download.php" zeigt bzw. dahin abgeschickt wird.
HTML:
<form action="download.php" method="post">
  <input ...
Und in der "download.php" prüfst du, ob der Code richtig ist (hier IsRightCode()), wenn er richtig ist, dann soll die Datei zum Download erscheinen.
Jetzt ist die Frage, wie du die Datei speicherst bzw. identifizierst.



Das hier wird mein download.php, wo wird jetzt das script von dir eingebaut?
PHP:
<?php


// Allow direct file download (hotlinking)?
// Empty - allow hotlinking
// If set to nonempty value (Example: example.com) will only allow downloads when referrer contains this text
define('ALLOWED_REFERRER', '');

// Download folder, i.e. folder where you keep all files for download.
// MUST end with slash (i.e. "/" )
define('BASE_DIR','img/');

// log downloads?  true/false
define('LOG_DOWNLOADS',true);

// log file name
define('LOG_FILE','downloads.log');

// Allowed extensions list in format 'extension' => 'mime type'
// If myme type is set to empty string then script will try to detect mime type 
// itself, which would only work if you have Mimetype or Fileinfo extensions
// installed on server.
$allowed_ext = array (

  // archives
  'zip' => 'application/zip',

  // documents
  'pdf' => 'application/pdf',
  'doc' => 'application/msword',
  'xls' => 'application/vnd.ms-excel',
  'ppt' => 'application/vnd.ms-powerpoint',
  
  // executables
  'exe' => 'application/octet-stream',

  // images
  'gif' => 'image/gif',
  'png' => 'image/png',
  'jpg' => 'image/jpeg',
  'jpeg' => 'image/jpeg',

  // audio
  'mp3' => 'audio/mpeg',
  'wav' => 'audio/x-wav',

  // video
  'mpeg' => 'video/mpeg',
  'mpg' => 'video/mpeg',
  'mpe' => 'video/mpeg',
  'mov' => 'video/quicktime',
  'avi' => 'video/x-msvideo'
);



####################################################################
###  DO NOT CHANGE BELOW
####################################################################

// If hotlinking not allowed then make hackers think there are some server problems
if (ALLOWED_REFERRER !== ''
&& (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false)
) {
  die("Internal server error. Please contact system administrator.");
}

// Make sure program execution doesn't time out
// Set maximum script execution time in seconds (0 means no limit)
set_time_limit(0);

if (!isset($_GET['f']) || empty($_GET['f'])) {
  die("Please go to the Mainpage.");
}

// Get real file name.
// Remove any path info to avoid hacking by adding relative path, etc.
$fname = basename($_GET['f']);

// Check if the file exists
// Check in subfolders too
function find_file ($dirname, $fname, &$file_path) {

  $dir = opendir($dirname);

  while ($file = readdir($dir)) {
    if (empty($file_path) && $file != '.' && $file != '..') {
      if (is_dir($dirname.'/'.$file)) {
        find_file($dirname.'/'.$file, $fname, $file_path);
      }
      else {
        if (file_exists($dirname.'/'.$fname)) {
          $file_path = $dirname.'/'.$fname;
          return;
        }
      }
    }
  }

} // find_file

// get full file path (including subfolders)
$file_path = '';
find_file(BASE_DIR, $fname, $file_path);

if (!is_file($file_path)) {
  die("File does not exist. Make sure you specified correct file name."); 
}

// file size in bytes
$fsize = filesize($file_path); 

// file extension
$fext = strtolower(substr(strrchr($fname,"."),1));

// check if allowed extension
if (!array_key_exists($fext, $allowed_ext)) {
  die("Not allowed file type."); 
}

// get mime type
if ($allowed_ext[$fext] == '') {
  $mtype = '';
  // mime type is not set, get from server settings
  if (function_exists('mime_content_type')) {
    $mtype = mime_content_type($file_path);
  }
  else if (function_exists('finfo_file')) {
    $finfo = finfo_open(FILEINFO_MIME); // return mime type
    $mtype = finfo_file($finfo, $file_path);
    finfo_close($finfo);  
  }
  if ($mtype == '') {
    $mtype = "application/force-download";
  }
}
else {
  // get mime type defined by admin
  $mtype = $allowed_ext[$fext];
}

// Browser will try to save file with this filename, regardless original filename.
// You can override it if needed.

if (!isset($_GET['fc']) || empty($_GET['fc'])) {
  $asfname = $fname;
}
else {
  // remove some bad chars
  $asfname = str_replace(array('"',"'",'\\','/'), '', $_GET['fc']);
  if ($asfname === '') $asfname = 'NoName';
}

// set headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $mtype");
header("Content-Disposition: attachment; filename=\"$asfname\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);

// download
// @readfile($file_path);
$file = @fopen($file_path,"rb");
if ($file) {
  while(!feof($file)) {
    print(fread($file, 1024*8));
    flush();
    if (connection_status()!=0) {
      @fclose($file);
      die();
    }
  }
  @fclose($file);
}

// log downloads
if (!LOG_DOWNLOADS) die();

$f = @fopen(LOG_FILE, 'a+');
if ($f) {
  @fputs($f, date("m.d.Y g:ia")."  ".$_SERVER['REMOTE_ADDR']."  ".$fname."\n");
  @fclose($f);
}

?>
 
(Du hast doppelt gepostet! Das gleiche!) Maik hats behoben.

Das mit dem Download ist leicht. Als Ziel musst du nur ein PHP-Skript angeben, welches überprüft, ob der eingegebene Code richtig ist und ggf. die Datei zum Download bereitstellt:
PHP:
if (IsRightCode())
{
  header("Content-disposition: attachment; filename=fname.exe");
}


muss ich bei filename=fname.exe die zu runterladene datei angeben?....also

PHP:
if (IsRightCode())
{
  header("Content-disposition: attachment; filename=beispiel_bild.jpeg");
}
 
filename ist der Name, der dem Benutzer angezeigt wird.

Die zu runterladene Datei musst du mit echo ausgeben
 
Wieso wird eigentlich so selten aufmerksam gelesen?

Naja, nicht alle Posts besitzen eine explizite Aussage und die die mit Arbeit (klicken) verbunden sind werden ignoriert ;)
Werde dagegen gleich mal ein Paper schreiben.

"Die zu runterladene Datei musst du mit echo ausgeben" kann zum Beispiel mehrfach interpretiert werden und so geschehen Fehler.


Gesagt wurde bisher, dass in der header() Information der Dateiname an sich steht.
Mit der hier zitierten Aussage war gemeint das der Dateiinhalt per echo ausgegeben (an den Client geliefert) werden muss.
Dies erreichst du per echo file_get_contents : http://php.net/manual/de/function.file-get-contents.php

Viel schlimmer finde "ish" immer wieder wie die deutsche Sprache stark vernachlässigt wird. Ich mein... Warum? Um die Schwierigkeiten der Kommunikation zu erhöhen? :D

Danke erstmal. Aber wie und wo soll ish das script einbaun?
 
Zuletzt bearbeitet:
Naja, nicht alle Posts besitzen eine explizite Aussage und die die mit Arbeit (klicken) verbunden sind werden ignoriert ;)
Werde dagegen gleich mal ein Paper schreiben.

"Die zu runterladene Datei musst du mit echo ausgeben" kann zum Beispiel mehrfach interpretiert werden und so geschehen Fehler.


Gesagt wurde bisher, dass in der header() Information der Dateiname an sich steht.
Mit der hier zitierten Aussage war gemeint das der Dateiinhalt per echo ausgegeben (an den Client geliefert) werden muss.
Dies erreichst du per echo file_get_contents : http://php.net/manual/de/function.file-get-contents.php

Viel schlimmer finde "ish" immer wieder wie die deutsche Sprache stark vernachlässigt wird. Ich mein... Warum? Um die Schwierigkeiten der Kommunikation zu erhöhen? :D

Vielen Dan für eure hilfen, aber gibt es nicht da schon fertige scripts, die man benutzen kann? Weil irgendwie wird mir das zu kompliziert, weil ich bin kein pro in php.
 
Zurück