Autor Zpráva
Joker0cz
Profil *
Mám tento problém chci založit server kam lidi budou moct uploadovat své soubory mám uploadování ale problém spočívá v tom že chci aby se při každém stažení zobrazila reklama.
Jenomže po uploadu se zobrazí přímá cesta k souboru, takže lidem se zobrazí hned uložte soubor. Potřeboval bych script kterej by při otevření tohoto linku po uploadu otevřel popup okno nebo nejaký jiný řešení.Na začátku je index s uploadem php a složka upload do které se soubory ukladají. Posim o pomoc.
Medvídek
Profil
Tak stahování udělej tak, že se otevře stránka, která bude mít v hlavičce refresh po x vteřinách (na stránce bude reklama) a pak se teprve stáhne soubor :)

třeba reklama.php?soubor=52 (pokud budeš mít soubory v DB, jinak třeba reklama.php?soubor=DSC25.jpg).
v meta refresh budeš mít třeba odkaz na
reklama.php?stahni=".$_GET["soubor"]."
a kód
if(isset($_GET["stahni"])) {
header("Content-Disposition: attachment; filename=".$_GET["stahni"]);   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize("upload/".$_GET["stahni"]));
readfile("upload/".$_GET["stahni"]);

}

Tady sem ti to narychlo spíchnul (pro představu), ještě bych to ošetřil funkcí file exist.
V souboru data.txt máš zdroják.

Rozhodně bych ale nespoléhal na názvy souborů a dával bych bych při uploadu souborům nějaký prefix a ten bych používal i při stahování a neukazoval bych ho v URL, aby si pak lidi nestahovali co se jim zlíbí :)
Joker0cz
Profil *
Hele díky moc ale furt bych to potřeboval vysvětlit nějak pro méněchápající lidi (debily). Já ještě php moc neumim tak zatim pracuju s kódama kterým rozumím.
tohle sem udělal jenom to základní zbytek potom dodělam (mám namysli vzhled). Zatim sem udělal upload za pomocí kamaráda ale ten to vymyslel tak
že se odkaz zobrazí ale rovnou na soubor.

Index:
<html>
  <head>
    <title>Upload souborù</title>
  </head>
  <body>
    <form action="nahrat.php" method="post" enctype="multipart/form-data">
      <input type="file" name="fupload">
      <input type="submit" value="Nahrát">
    </form>
  </body>
</html>


a potom soubor nahrat.php

<html>
  <head>
    <title>Upload souborù</title>
  </head>
  <body>
    <form action="#" method="post" enctype="multipart/form-data">
      <input type="file" name="fupload">
      <input type="submit" value="Nahrát">
    </form>
<?php
if (isset($_FILES['fupload']))
  {
    $slozka = "upload"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je promìnná $cil, která obsahuje adresáø, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí doèastné umístìní souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z doèastného umístìní do cílového souboru a složky
      or die ("Pøenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještì na soubor vyhodíme funkci chmod, která zmìní jeho práva na maximum, pokud by soubor psal chybu zmìòte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspìšnì
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspìšnì nahrán na server.\n<br><a href=\"$cil\">Jdi na soubor</a>";
    }else{
      echo "Soubor nemohl být nahrán.\nPoèet chyb: " . $_FILES['fupload']['error'];
    }
  }
?>
</body>
</html>


no a dále nwm jak si to chtěl udělat prosím este jednou o pomoc pro blbečka.
Medvídek
Profil
Joker0cz:
http://vallner.party-akce.cz/

Teď to máš i s nahráváním. (opět sem neřešil zabezpečení názvů souborů atd, je to dost hrubej a napadnutlenej skript)

index.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">;
    <title>DOWNLOAD</title>
  </head>
  <body>
  <form action="index.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fupload">
    <input type="submit" value="Nahrát">
  </form>
  <?php
  if (isset($_FILES['fupload']))
  {
    $slozka = "upload"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je promìnná $cil, která obsahuje adresáø, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí doèastné umístìní souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z doèastného umístìní do cílového souboru a složky
      or die ("Pøenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještì na soubor vyhodíme funkci chmod, která zmìní jeho práva na maximum, pokud by soubor psal chybu zmìòte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspìšnì
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.";
    }else{
      echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
    }
  }
?>
  Seznam souborů: <br />
  <?php 
  $files=opendir("upload/");
  while (($soubor = readdir($files))!==false){
        if($soubor!="." AND $soubor!=".."){       
        echo "<a href='download.php?soubor=".$soubor."' title='Stáhnout'>".$soubor."</a><br />";
        }
     }
  ?>
  </body>
</html>


download.php:
<?php 
if(isset($_GET["stahni"])){
header("Content-Disposition: attachment; filename=".$_GET["stahni"]);   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize("images/".$_GET["stahni"]));
readfile("images/".$_GET["stahni"]);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">;
  <?php 
  if(isset($_GET["soubor"])){
  echo '<meta http-equiv="refresh" content="3;URL=?stahni='.$_GET["soubor"].'">';
  }
  ?>
  <title>DOWNLOAD</title>
  </head>
  <body>
  <?php 
  if(isset($_GET["soubor"])){
  echo "zobrazení reklamy";
  }
  ?>
  </body>
</html>
Joker0cz
Profil *
Je to super fakt moc děkuju i tentokrát se musí uznat že i na fóru jsou lidi super :D akorát bych měl eště takovej malej dotaz jaký zabezpečení kromě funkce file exist bych měl použít ??
Medvídek
Profil
Za prve bych si udělal nějakou funkci na kontrolu názvů uploadovaných souborů. (všechno bych hodil malými písmeny, bez diakritiky, mezer a speciálních znaků) a já používám k názvům ještě aktuální datum a čas ve formátu 100820102110 a souborům dávám prefix, třeba adsfg_. Takže se nemůže stát, že ti někdo do url zadá index.php a stáhne si ho. Pře nabídnutím stažení ten soubor zase přejmenuješ tak, že odmažeš ten prefix, aby ho nikdo neviděl).

Druhý a lepsí způsob je použít databázi, kam ukládat názvy souborů,
Joker0cz
Profil *
No když tady zase narazím já s databázema neumím jedyní tak maximalně vim že ji potřebuju při instalaci wordpressu nebo joomly mám na mysly mysql ale jinak jsem totálně vedle.
Medvídek
Profil
Joker0cz:
Tak sem to trošku upravil:

index.php


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com"&gt;
    <title>DOWNLOAD</title>
  </head>
  <body>
  <form action="index.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fupload">
    <input type="submit" value="Nahrát">
  </form>
  <?php
  define("PREFIX", "awdefr_");  //7pismeny prefix
  function pekne_url($nadpisek) {
    $url = $nadpisek;
    $url = preg_replace('~[^\\pL0-9_]+~u', '-', $url);
    $url = trim($url, "-");
    $url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
    $url = strtolower($url);
    $url = preg_replace('~[^-a-z0-9_]+~', '', $url);
    return $url;
  }
  function utf2ascii($text)   
    { 
        $return = Str_Replace( 
                        Array("á","č","ď","é","ě","í","ľ","ň","ó","ř","š","ť","ú","ů","ý ","ž","Á","Č","Ď","É","Ě","Í","Ľ","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž") ,

                        Array("a","c","d","e","e","i","l","n","o","r","s","t","u","u","y ","z","A","C","D","E","E","I","L","N","O","R","S","T","U","U","Y","Z") ,                        
                        $text); 
        $return = StrToLower($return); //velká písmena nahradí malými. 
        return $return;  
    }
  if (isset($_FILES['fupload']))
  {
    $slozka = "upload"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
    $cil = $slozka . "/" .PREFIX.date("Ymd").date("Hi").pekne_url(utf2ascii($_FILES['fupload']['name'])).".".strtolower(pathinfo($_FILES['fupload']['name'], PATHINFO_EXTENSION));   // Toto je promìnná $cil, která obsahuje adresáø, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí doèastné umístìní souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z doèastného umístìní do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat ".PREFIX.$_FILES['fupload']['tmp_name'].date("Ymd").date("Hi")); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještì na soubor vyhodíme funkci chmod, která zmìní jeho práva na maximum, pokud by soubor psal chybu zmìòte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspìšnì
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.";
    }else{
      echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
    }
  }
?>
  Seznam souborů: <br />
  <?php 
  $files=opendir("upload/");
  while (($soubor = readdir($files))!==false){
        if($soubor!="." AND $soubor!=".."){       
        echo "<a href='download.php?soubor=".substr($soubor, 7)."' title='Stáhnout'>".substr($soubor, 19)."</a><br />";
        }
     }
  ?>
  </body>
</html>



download.php

<?php
define("PREFIX", "awdefr_");  
if(isset($_GET["stahni"])){
if(file_exists("upload/".PREFIX.$_GET["stahni"])){
header("Content-Disposition: attachment; filename=".$_GET["stahni"]); 
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize("upload/".PREFIX.$_GET["stahni"]));
readfile("upload/".PREFIX.$_GET["stahni"]);
}
else {echo "Soubor nenalezen.";}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com"&gt;
  <?php 
  if(isset($_GET["soubor"])){
  echo '<meta http-equiv="refresh" content="3;URL=?stahni='.$_GET["soubor"].'">';
  }
  ?>
  <title>DOWNLOAD</title>
  </head>
  <body>
  <?php 
  if(isset($_GET["soubor"])){
  echo "zobrazení reklamy";
  }
  ?>
  </body>
</html>



Ještě tam není ošetřený mime type souborů, aby ti někdo nenahrával PHP soubory atd, ale bohužel odjíždím za chvíli do Itálie, tak jedině až po neděli :)
Keeehi
Profil
Medvídek:
Problém je, že tečku před koncovkou to nahradí pomlčkou. Už vidím ty rozradostněné uživatele, jak si to v každém souboru přepisují.
Medvídek
Profil
Keeehi:
Není pravda, koncovka se doplní:
".".strtolower(pathinfo($_FILES['fupload']['name'], PATHINFO_EXTENSION));
Keeehi
Profil
Medvídek:
Když jsem si to zkopíroval a vyzkoušel ja obrázku "003.jpg" tak to z něj udělalo "awdefr_201008102208003-jpg".
Joker0cz
Profil *
No je to ok ale potřeboval bych aby se tam nezobrazoval seznam souborů ale po uploaudnutí jenom link a to je všechno newíte jak bych to měl udělat ? Prosím o pomoc.
Joker0cz
Profil *
NO a taky to mění názvy souborů a jejich přípony nwíte co s tím ? když jsem tam nahrál soubor skoro.rar tak seznamu bylo skoro-rar.rar sem si stáhl a výsledný název po stahnutí byl ar.rar :D
jinka tyhle mouchy vylepšit a mam hotovo tak vás este naposledy prosím o pomoc.
xmark
Profil
Joker0cz:
A peníze za tu reklamu už zvládneš fakturovat sám?
Joker0cz
Profil *
jo a mohl bych se s nikim podělit :D
Joker0cz
Profil *
a další věci je že se php teprve učim vim že chci moc ale když to udělam já vždycky my to vyhodí nějakou chybu at to skousim jak to skousim vždy to vyhod že je nejakej problém s funkcí proto píšu sem na fórum abych se něcopřiučil :D
PostCC
Profil
No a čemu tedy nerozumíte? Která část kódu vám není natolik jasná, že si s její úpravou nedokážete poradit? A co jste doposud udělal pro odstranění chyby? Abychom se tu zbytečně nemořili s nějakým postupem, o kterém už máte ověřeno, že nefunguje. Rád pomůžu, když uvidím konkrétní problém.
Medvídek
Profil
Joker0cz:
Místo
Seznam souborů: <br />
  <?php 
  $files=opendir("upload/");
  while (($soubor = readdir($files))!==false){
        if($soubor!="." AND $soubor!=".."){       
        echo "<a href='download.php?soubor=".substr($soubor, 7)."' title='Stáhnout'>".substr($soubor, 19)."</a><br />";
        }
     }
  ?>


hoďte jen ten odkaz na nahraný soubor.


http://vallner.party-akce.cz/ tady to máš opravený, snad je to dle tvých představ.
Joker0cz
Profil *
já můžu odkázat na cíl tímhle \n<br><a href=\"$cil\">Přejdi na soubor</a> ale jak mám odkázat na to aby se tam zobrazila reklama a né rovnou soubor jak jste te udělal vy ? prosím
Medvídek
Profil
Joker0cz:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">;
    <title>DOWNLOAD</title>
  </head>
  <body>
  <form action="index.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fupload">
    <input type="submit" value="Nahrát">
  </form>
  <?php
  define("PREFIX", "awdefr_");  //7pismeny prefix
  function pekne_url($nadpisek) {
    $url = $nadpisek;
    $url = preg_replace('~[^\\pL0-9_]+~u', '-', $url);
    $url = trim($url, "-");
    $url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
    $url = strtolower($url);
    $url = preg_replace('~[^-a-z0-9_]+~', '', $url);
    return $url;
  }
  function utf2ascii($text)   
    { 
        $return = Str_Replace( 
                        Array("á","č","ď","é","ě","í","ľ","ň","ó","ř","š","ť","ú","ů","ý ","ž","Á","Č","Ď","É","Ě","Í","Ľ","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž") ,

                        Array("a","c","d","e","e","i","l","n","o","r","s","t","u","u","y ","z","A","C","D","E","E","I","L","N","O","R","S","T","U","U","Y","Z") ,                        
                        $text); 
        $return = StrToLower($return); //velká písmena nahradí malými. 
        return $return;  
    }
  if (isset($_FILES['fupload']))
  {
    $slozka = "upload"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
    $nazev = PREFIX.date("Ymd").date("Hi").pekne_url(utf2ascii($_FILES['fupload']['name'])).".".strtolower(pathinfo($_FILES['fupload']['name'], PATHINFO_EXTENSION)); 
    $cil = $slozka . "/" .$nazev; // Toto je promìnná $cil, která obsahuje adresáø, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí doèastné umístìní souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z doèastného umístìní do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat ".PREFIX.$_FILES['fupload']['tmp_name'].date("Ymd").date("Hi")); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještì na soubor vyhodíme funkci chmod, která zmìní jeho práva na maximum, pokud by soubor psal chybu zmìòte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspìšnì
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.<br /> Stáhnout: <a href='download.php?soubor=".substr($nazev, 7)."' title='Stáhnout'>".substr($nazev, 19)."</a><br />";
    }else{
      echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
    }
  }
?>
 

  </body>
</html>



<?php
define("PREFIX", "awdefr_");  
if(isset($_GET["stahni"])){
if(file_exists("upload/".PREFIX.$_GET["stahni"])){
header("Content-Disposition: attachment; filename=".substr($_GET["stahni"], 12));   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize("upload/".PREFIX.$_GET["stahni"]));
readfile("upload/".PREFIX.$_GET["stahni"]);
}
else {echo "Soubor nenalezen.";}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">;
  <?php 
  if(isset($_GET["soubor"])){
  echo '<meta http-equiv="refresh" content="3;URL=?stahni='.$_GET["soubor"].'">';
  }
  ?>
  <title>DOWNLOAD</title>
  </head>
  <body>
  <?php 
  if(isset($_GET["soubor"])){
  echo "zobrazení reklamy";
  }
  ?>
  </body>
</html>

Joker0cz
Profil *
    if($_FILES['fupload']['type']=="application/octet-stream"){ 
    echo "Soubory s příponou PHP jsou zakázány!"; 
    }else{ 


a mohl bych tímhle tím zablokovat upload php souboru, je to správně ?
Medvídek
Profil
Joker0cz:
PHP má tuším text/html


zkus třeba:
$koncovky = array('php', 'js', 'html', 'exe');
if(in_array(strtolower(pathinfo($_FILES['fupload']["name"], PATHINFO_EXTENSION)), $koncovky)) { echo "Nepovolený soubor"; }
Joker0cz
Profil *
potřeboval bych tam este teda narvat tady ty dva kousky kam bych je měl umístit tak aby to šlapalo, pls ?

$progress = upload_progress_meter_get_info($_GET["idf"]);
if ($progress["bytes_uploaded"] < $progress["bytes_total"]) {
    echo '<meta http-equiv="Refresh" content="1; url=' . htmlspecialchars("$_SERVER[PHP_SELF]?$_SERVER[QUERY_STRING]") . '" />';
}
echo "Staženo: $progress[bytes_uploaded] / $progress[bytes_total] B\n";

if($_FILES['fupload']['type']=="application/octet-stream"){ 
    echo "Soubory s příponou PHP jsou zakázány!"; 
    }else{ 
Joker0cz
Profil *
jo a tam by melo bejt jak ste rikal to text/html ne ?
Joker0cz
Profil *
jo ale i když se tam ten kód dá tak to nejede protože ve výsledku se stane tohle
Nepovolený souborSoubor index.php byl úspěšně nahrán na server.
Stáhnout: index-php.php
Joker0cz
Profil *
jo a nešlo by tam zamíchat i nějak --- File upload progress meter --- to je to když se nahrávají větší soubory že se ukáže kolik je hotovo jako je to tady ??
Joker0cz
Profil *
našel jsem to i tady ale nwm jak to mam použít poradíte prosím ?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: