Autor | Zpráva | ||
---|---|---|---|
Joker0cz Profil * |
#1 · Zasláno: 10. 8. 2010, 18:10:36
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 |
#2 · Zasláno: 10. 8. 2010, 18:19:27 · Upravil/a: Medvídek
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"]." 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 * |
#3 · Zasláno: 10. 8. 2010, 19:23:36
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 |
#4 · Zasláno: 10. 8. 2010, 19:46:30
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 * |
#5 · Zasláno: 10. 8. 2010, 21:04:06
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 |
#6 · Zasláno: 10. 8. 2010, 21:13:40
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 * |
#7 · Zasláno: 10. 8. 2010, 21:23:53
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 |
#8 · Zasláno: 10. 8. 2010, 21:50:18 · Upravil/a: Medvídek
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"> <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"> <?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 |
#9 · Zasláno: 10. 8. 2010, 22:07:57
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 |
#10 · Zasláno: 10. 8. 2010, 22:33:25
Keeehi:
Není pravda, koncovka se doplní: ".".strtolower(pathinfo($_FILES['fupload']['name'], PATHINFO_EXTENSION)); |
||
Keeehi Profil |
#11 · Zasláno: 11. 8. 2010, 08:56:33 · Upravil/a: Keeehi
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 * |
#12 · Zasláno: 11. 8. 2010, 11:29:05
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 * |
#13 · Zasláno: 11. 8. 2010, 11:37:07
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 |
#14 · Zasláno: 11. 8. 2010, 11:45:01
Joker0cz:
A peníze za tu reklamu už zvládneš fakturovat sám? |
||
Joker0cz Profil * |
#15 · Zasláno: 11. 8. 2010, 11:59:53
jo a mohl bych se s nikim podělit :D
|
||
Joker0cz Profil * |
#16 · Zasláno: 11. 8. 2010, 12:07:28
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 |
#17 · Zasláno: 11. 8. 2010, 12:18:13
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 |
#18 · Zasláno: 11. 8. 2010, 13:29:42 · Upravil/a: Medvídek
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 * |
#19 · Zasláno: 11. 8. 2010, 15:24:27
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 |
#20 · Zasláno: 11. 8. 2010, 15:29:27
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 * |
#21 · Zasláno: 11. 8. 2010, 15:32:31
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 |
#22 · Zasláno: 11. 8. 2010, 15:42:36 · Upravil/a: Medvídek
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 * |
#23 · Zasláno: 11. 8. 2010, 16:11:32
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 * |
#24 · Zasláno: 11. 8. 2010, 16:12:08
jo a tam by melo bejt jak ste rikal to text/html ne ?
|
||
Joker0cz Profil * |
#25 · Zasláno: 11. 8. 2010, 17:10:17
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 * |
#26 · Zasláno: 11. 8. 2010, 17:22:46
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 * |
#27 · Zasláno: 11. 8. 2010, 17:27:22
našel jsem to i tady ale nwm jak to mam použít poradíte prosím ?
|
||
Časová prodleva: 14 let
|
0