dziś chciałbym przedstawić skrypt na upload zdjęć php + MySql
Skrypt ten powstał ze zlepków z różnych stron
Jest to pierwszy mój tego typu skrypt więc proszę o uwagi i krytykę oraz lepsze rozwiązania tego skryptu.
Właściwość:
- Linki do zdjęcia (bezpośredni, html, code)
- Losowanie nazwy pliku (dla niepowożenia się 2 takich samych nazw. (Dodając system logowanie, rejestracji + profil otrzymamy mniejszą szanse na powtórzenie pliku bo do losowej nazwy doklejany jest login użytkownika co daje nam dodatkowo jaki użytkownik wysłał to zdjęcie. (Niezalogowany nie ma do tego dostępu ponieważ nie dodało by nicku)))
- Można rozbudować dodając do tego system logowania, rejestracji + profil (mogę to przedstawić jeżeli ktoś chciałby)
- Można dodać galerię wszystkich dodanych zdjęć
- Można dodać stronę która za pomocą ID z bazy wyświetli nam zdjęcia (losowe lub w kolejność)
1.
A więc jako pierwsze co musimy zrobić to taką oto tabelę w bazie danych MySql:
Kod
CREATE TABLE IF NOT EXISTS `img` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`pojemnosc` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
`nazwa` varchar(60) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
`typ` varchar(45) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
`id` int(10) NOT NULL AUTO_INCREMENT,
`pojemnosc` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
`nazwa` varchar(60) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
`typ` varchar(45) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
2.
Teraz pozostało nam stworzyć plik o nazwie upload.php
w którym umieszczamy poniższy kod:
Kod
<html>
<!DOCTYPE html>
<html lang="pl-PL">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Darmowy upload plików by Okti</title>
<meta name="keywords" content="Upload, free" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
</head>
<body>
<center>
<font size="50"><b>MyFotobyEinisan</b></font>
</br>
<form action="upload-v.php" method="post" enctype="multipart/form-data" name="form1">
<p align="center">Wysyłanie plików na serwer. </p>
<input name="plik" type="file" size="50"/>
<input name="max_file_size" type="hidden" value="1048576" />
<input value="Wyślij plik" type="submit" />
</form>
</center>
</body>
</html>
<!DOCTYPE html>
<html lang="pl-PL">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Darmowy upload plików by Okti</title>
<meta name="keywords" content="Upload, free" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
</head>
<body>
<center>
<font size="50"><b>MyFotobyEinisan</b></font>
</br>
<form action="upload-v.php" method="post" enctype="multipart/form-data" name="form1">
<p align="center">Wysyłanie plików na serwer. </p>
<input name="plik" type="file" size="50"/>
<input name="max_file_size" type="hidden" value="1048576" />
<input value="Wyślij plik" type="submit" />
</form>
</center>
</body>
</html>
3.
Teraz pozostało zrobić plik o nazwie upload-v.php
oraz wpisać tam ten kod
Kod
<html>
<!DOCTYPE html>
<html lang="pl-PL">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Darmowy upload plików by Okti</title>
<meta name="keywords" content="Upload, free" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
</head>
<body>
<center>
<font size="50"><b>MyFotoEinisan</b></font>
</br>
<?php
session_start();
// Konfiguracja
$config['mode'] = array(true, true, true, true); // Fajna tablica, nie?
$config['length'] = 8;
// Alfabet
$letters = 'abcdefghijklmnopqrstuvwxyz';
// Liczby
if($config['mode'][0])
{
$values = '0123456789'; // Można użyć tego: implode('', range(0, 9));
}
// Znaki specjalne
if($config['mode'][1])
{
$values .= '!@#$%&';
}
// Małe litery
if($config['mode'][2])
{
$values .= $letters;
}
// Duże litery
if($config['mode'][3])
{
$values .= strtoupper($letters);
}
for($h = 0, $length = (strlen($values) - 1); $h < $config['length']; ++$h)
{
$random_symbols .= substr($values, mt_rand(0, $length), 1);
}
$p_pojemnosc=$_FILES['plik']['size'];//pojemnosc pliku
$p_typ=$_FILES['plik']['type']; // typ pliku
$p_nazwa=$_FILES['plik']['name']; // nazwa pliku
$p_smiec=$_FILES['plik']['tmp_name']; // chwilowa nazwa pliku
//wycinamy rozszerzenie z pobieranego pliku
$explode_dir = explode(".", $p_nazwa);
$p_roz = array_pop($explode_dir);
/* odbieramy dane z pola ukrytego i zaokrąglamy je do 3 miejsca
po przecinku/dzielimy przez 1204*1024 by było w MB*/
$max_size=round(($_POST['max_file_size']/1048576),3)."MB";
//zaokrąglamy "round" do 2 miejsc po przecinku i przeliczamy rozmiar pliku na MB
$poj_MB=round(($p_pojemnosc/1048576),2).'MB';
//kodujemy nasz plik metodą MD5 i dodajemy date i godzinę oraz rozszerzenie pliku
$p_nazwa_zm=($random_symbols).".".$p_roz;
$folder="pliki/";
//---Kolorki HTML---
$k_cze="<font color=#ff0000>";
$f_koniec="</font>";
$k_nieb="<font color=white>";
if ($p_pojemnosc <= 0)
{
echo ("Plik jest pusty nie mogę go przesłać <b>".$k_cze.$p_nazwa." ".$poj_MB.$f_koniec."</b><br />");
echo "<a href=upload.php>Wracaj ...</a>";
exit;
}
if ($poj_MB > $max_size)
{
echo("Plik jest za duży maksymalnie można wysłać <b>".$k_cze.$max_size.$f_koniec."</b>"." .Plik wysyłany ma rozmiar <b><i>".$k_nieb.$poj_MB.$f_koniec."</b></i><br />");
echo "<a href=upload.php>Wracaj ...";
exit;
}
if (file_exists($folder.$p_nazwa_zm))
{
echo ("Plik o takiej nazwie jest już na serwerku <b><i>".$p_nazwa_zm."</b></i><br />");
echo "<a href=upload.php>Wracaj ...";
exit;
} else {
if(!@move_uploaded_file($p_smiec, $folder.$p_nazwa_zm))
exit('Nie mozna zachowac pliku. Prawdopodobnie nie ma folderu lub nie można w nim zapisać');
echo "<center><div class='link'>Przeslanie udało się - <b>".$k_nieb.$p_nazwa."</b>"." Waga:".$poj_MB."</div><br />";
echo "<div class='link'>Link do obrazka: - <b><a href='http://twój-adres.pl/pliki/".$p_nazwa_zm."' target='_blank'> http://twój-adres.pl/pliki/".$p_nazwa_zm."</a></b></div></br>";
echo "<div class='link'>Na stonę www: - <b> <img src='pliki/".$p_nazwa_zm."'></b></div></br>";
echo "<div class='link'>Na forum: - <b> [img]http://twój-adres.pl/pliki/".$p_nazwa_zm."[/img]</b></div></br>";
echo "Podgląd: </br><fieldset><img src='http://twój-adres.pl/pliki/".$p_nazwa_zm."' width='600px'></fieldset></br>";
$path_file=$folder.$p_nazwa_zm;
$connection = @mysql_connect('host', 'user', 'pass') or die('Error connecting to mysql');
mysql_select_db('name-db');
$zapytanie=mysql_query("insert into img values(NULL,'$p_pojemnosc','$path_file','$p_typ')");
echo "<a href=upload.php>Wracaj ...</a>";
}
?>
</center>
</body>
</html>
<!DOCTYPE html>
<html lang="pl-PL">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Darmowy upload plików by Okti</title>
<meta name="keywords" content="Upload, free" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
</head>
<body>
<center>
<font size="50"><b>MyFotoEinisan</b></font>
</br>
<?php
session_start();
// Konfiguracja
$config['mode'] = array(true, true, true, true); // Fajna tablica, nie?
$config['length'] = 8;
// Alfabet
$letters = 'abcdefghijklmnopqrstuvwxyz';
// Liczby
if($config['mode'][0])
{
$values = '0123456789'; // Można użyć tego: implode('', range(0, 9));
}
// Znaki specjalne
if($config['mode'][1])
{
$values .= '!@#$%&';
}
// Małe litery
if($config['mode'][2])
{
$values .= $letters;
}
// Duże litery
if($config['mode'][3])
{
$values .= strtoupper($letters);
}
for($h = 0, $length = (strlen($values) - 1); $h < $config['length']; ++$h)
{
$random_symbols .= substr($values, mt_rand(0, $length), 1);
}
$p_pojemnosc=$_FILES['plik']['size'];//pojemnosc pliku
$p_typ=$_FILES['plik']['type']; // typ pliku
$p_nazwa=$_FILES['plik']['name']; // nazwa pliku
$p_smiec=$_FILES['plik']['tmp_name']; // chwilowa nazwa pliku
//wycinamy rozszerzenie z pobieranego pliku
$explode_dir = explode(".", $p_nazwa);
$p_roz = array_pop($explode_dir);
/* odbieramy dane z pola ukrytego i zaokrąglamy je do 3 miejsca
po przecinku/dzielimy przez 1204*1024 by było w MB*/
$max_size=round(($_POST['max_file_size']/1048576),3)."MB";
//zaokrąglamy "round" do 2 miejsc po przecinku i przeliczamy rozmiar pliku na MB
$poj_MB=round(($p_pojemnosc/1048576),2).'MB';
//kodujemy nasz plik metodą MD5 i dodajemy date i godzinę oraz rozszerzenie pliku
$p_nazwa_zm=($random_symbols).".".$p_roz;
$folder="pliki/";
//---Kolorki HTML---
$k_cze="<font color=#ff0000>";
$f_koniec="</font>";
$k_nieb="<font color=white>";
if ($p_pojemnosc <= 0)
{
echo ("Plik jest pusty nie mogę go przesłać <b>".$k_cze.$p_nazwa." ".$poj_MB.$f_koniec."</b><br />");
echo "<a href=upload.php>Wracaj ...</a>";
exit;
}
if ($poj_MB > $max_size)
{
echo("Plik jest za duży maksymalnie można wysłać <b>".$k_cze.$max_size.$f_koniec."</b>"." .Plik wysyłany ma rozmiar <b><i>".$k_nieb.$poj_MB.$f_koniec."</b></i><br />");
echo "<a href=upload.php>Wracaj ...";
exit;
}
if (file_exists($folder.$p_nazwa_zm))
{
echo ("Plik o takiej nazwie jest już na serwerku <b><i>".$p_nazwa_zm."</b></i><br />");
echo "<a href=upload.php>Wracaj ...";
exit;
} else {
if(!@move_uploaded_file($p_smiec, $folder.$p_nazwa_zm))
exit('Nie mozna zachowac pliku. Prawdopodobnie nie ma folderu lub nie można w nim zapisać');
echo "<center><div class='link'>Przeslanie udało się - <b>".$k_nieb.$p_nazwa."</b>"." Waga:".$poj_MB."</div><br />";
echo "<div class='link'>Link do obrazka: - <b><a href='http://twój-adres.pl/pliki/".$p_nazwa_zm."' target='_blank'> http://twój-adres.pl/pliki/".$p_nazwa_zm."</a></b></div></br>";
echo "<div class='link'>Na stonę www: - <b> <img src='pliki/".$p_nazwa_zm."'></b></div></br>";
echo "<div class='link'>Na forum: - <b> [img]http://twój-adres.pl/pliki/".$p_nazwa_zm."[/img]</b></div></br>";
echo "Podgląd: </br><fieldset><img src='http://twój-adres.pl/pliki/".$p_nazwa_zm."' width='600px'></fieldset></br>";
$path_file=$folder.$p_nazwa_zm;
$connection = @mysql_connect('host', 'user', 'pass') or die('Error connecting to mysql');
mysql_select_db('name-db');
$zapytanie=mysql_query("insert into img values(NULL,'$p_pojemnosc','$path_file','$p_typ')");
echo "<a href=upload.php>Wracaj ...</a>";
}
?>
</center>
</body>
</html>
Całość działa jak należy.
Daję możliwość przetestowania skryptu
Skrypt na tej stronie ma dodany system logowania, rejestracji + profil
Testowe dane logowanie:
Login: TesterUpload
Hasło: TesterUpload
Link:
Kod
http://einisan.hol.es/upload/upload.php