Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zrobić upload zdjęć php + MySql + test skryptu
Forum PHP.pl > Forum > PHP
okti2013
Cześć,
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;




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>



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> &lt;img src='pliki/".$p_nazwa_zm."'&gt;</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
lukaskolista
Pierwszy lepszy security checker: https://sitecheck.sucuri.net/results/einisa...load/upload.php (może się chwilę ładować jak się ważność cache skończy)
Pozdrawiam
okti2013
Cytat(lukaskolista @ 30.08.2016, 17:03:08 ) *
Pierwszy lepszy security checker: https://sitecheck.sucuri.net/results/einisa...load/upload.php (może się chwilę ładować jak się ważność cache skończy)
Pozdrawiam

Tak ale chcę nadmienić że ta strona jest na darmowym hostingu (na jakiś czas) po prostu testuje na niej takie rzeczy żeby w przyszłość stworzyć na normalnym płatnym dobrym hostingu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.