Autor | Zpráva | ||
---|---|---|---|
Alphard Profil |
#1 · Zasláno: 25. 6. 2015, 23:33:36
Dočasné* odkladiště věcí vyhozených z FAQ.
*snad # Rekurzivní zipování<?php class Zipuj { protected $jmeno_zipu; protected $root; protected $zip; public function __construct($root = ".", $jmeno_zipu = "zip.zip") { $this->root = $root; $this->jmeno_zipu = $jmeno_zipu; $this->zip = new ZipArchive(); $this->zip->open($this->jmeno_zipu, ZIPARCHIVE::CREATE); $this->nactiAdr(); $this->uloz(); } public function nactiAdr($cesta = "") { $hn = scandir($this->root.$cesta); foreach ($hn as $file) { if ($file == "." || $file == "..") { continue; } if (is_dir($this->root.$cesta."/".$file)) { $this->zip->addEmptyDir($cesta."/".$file); $this->nactiAdr($cesta."/".$file); } else { $this->zip->addFile($this->root.$cesta."/".$file, $cesta."/".$file); } } } public function uloz() { $this->zip->close(); } } // zazipuje nám vše na cestě zadané v první parametru a výsledný zip pojmenuje dle druhého parametru $zalohuj = new Zipuj('./test/test2', 'zaloha.zip'); Pozn: Vyžaduje knihovnu zip (nastavuje se v php.ini), není-li k dispozici, lze očekávat chybu Fatal error: Class 'ZipArchive' not found in … |
||
Alphard Profil |
#2 · Zasláno: 26. 6. 2015, 00:16:47
# Registrace uživatelůNa začátek uvedu odkazy na několik pokročilejších technik zabezpečení (nebo jeho obejití). Ukradli jsme účet k Facebooku. S Androidem za pět sekund Série článků Nenechte si uhodnout Session ID od Jana Tichého. Jednoduchá kostra přihlašovacího scriptu Základ napsal srigi. Tento script je návodem na jednoduchou realizaci přihlašování uživatelů na webu za pomoci databázové tabulky a sessions. Databázová tabulka Informace o uživatelích budeme uchovávat v databázové tabulce. Vytvoříte ji tak, že spustíte následující sql dotaz. CREATE TABLE users ( id int NOT NULL auto_increment, username varchar(20) NOT NULL, # délka je na vás password char(40) NOT NULL, # další sloupce lze doplnit dle potřeby, tohle je minimum PRIMARY KEY (id) ); Hned můžeme přidat nového uživatele. Heslo z bezpečnostích důvodů zahašujeme. Jméno je admin a heslo secret. INSERT INTO users (id, username, password) VALUES ( NULL, 'admin', SHA1('secret') ); PHP kód. Je podrobně komentován. V komentářích je mj. popsáno, kam vkládat obsah. <?php $path = "/"; // máte-li stránky v rootu, nechte bezezměny, pokud je provozujete v nějakém podadresáři, zadejte jeho jméno // např. stránky mám na moje-domena.cz/adresar/, tak zadám $path = "/adresar/"; // funkce pro ošetření vstupních dat od uživatele // viz http://cz.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc function db_escape($str) { return mysql_real_escape_string(@get_magic_quotes_gpc() ? stripslashes($str) : $str); } include "pripojeni_db.php"; // soubor pripojeni_db.php zajistí připojení k databázi a výběr databáze, se kterou pracujeme session_start(); // tohle je nezbytné a je nutné uvést tuto funkci na všech stránkách, kam se přihlášený uživatel dostane // možnost nastavit automatické spouštění session_start() nechávám stranou // zjistíme, co chce uživatel dělat if (isset($_SESSION['username']) && isset($_GET['logout'])) { // uživatel je přihlášen a chce se odhlásit, takže smažeme údaje o přihlášení $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_unset(); session_destroy(); // a přesměrujeme na index.php header("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303); exit; } elseif (isset($_SESSION['username'])) { //session_regenerate_id(); // ochrana před session fixation, lze vynechat // uživatel je přihlášen a nechce se odhlásit, zde zobrazíme obsah pro registrované // můžeme využit include apod. // tohle informuje uživatele, že je přihlášen a vypíše odkaz pro odhlášení // můžeme to ale přemístit do includovaného souboru (kam se nám hodí) echo "<p>Přihlášen: $_SESSION[username] <a href=\"http://".$_SERVER['SERVER_NAME'].$path."index.php?logout=1\">odhlásit</a></p>\n"; } else { // uzivatel není přihlášen // pokud odeslal přihlašovací údaje, snaží se přihlásit if (isset($_POST['username']) && isset($_POST['password'])) { // ošetříme vstupní údaje od uživatele // funkce trim() má význam hlavně u hesla, ořeže bílé znaky (např. mezery) na začátku a konci řetězce $username = db_escape(trim($_POST['username'])); $password = db_escape(trim($_POST['password'])); // zjistíme, jestli je v databázi daný uživatel a jestli se prokazuje platným heslem // více o ukládání hesel, např. o tzv. solení, najdete na http://php.vrana.cz/ukladani-hesel.php $result = mysql_query("SELECT COUNT(*) FROM users WHERE username = '$username' AND password = sha1('$password')"); if (mysql_result($result, 0)) // předpokládáme, že dotaz proběhl úspěšně, pokud ne, bude stejně vráceno false // true (a splnění podmínky) nastane pouze tehdy, když v databázi existuje správná kombinace uživatelského jména a hesla { // uložíme potřebné SESSION proměnné $_SESSION['username'] = $username; $_SESSION['cas_prihlaseni'] = time(); // čas, kdy se uživatel přihlásil, pozor, nejedná se o čas poslední akce, nevím, jestli ho využijete, může být smazán // po přihlášení uživatele přesměrujeme na index.php header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303); exit; // aby bylo pravidlům učiněno zadost, zde stejně končí podmínka a jiná nemůže být splněna } else { // uživatel zadal neplatné přihlašovací údaje // přesměrujeme ho na index.php a zobrazíme chybovou hlášku header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php?incorrect_login=1", TRUE, 303); exit; } } else { // uživatel není přihlášen a ani neodeslal přihlašovací formulář, tak mu ho zobrazíme echo "<div>"; if (isset($_GET['incorrect_login'])) { echo "<p style=\"color: #F00\">Zadali jste neplatné uživatelské jméno nebo heslo</p>\n"; } // zobrazíme formulář pro přihlášení ?> <form action="index.php" method="post"> Jméno: <input name="username" type="text"><br> Heslo: <input name="password" type="password"><br> <input name="submit" type="submit" value="Přihlásit"> </form> </div> <?php } } ?> |
||
Časová prodleva: 9 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0