PDA

Pogčedajte punu verziju : Upload php skripta


Ministar
02. 02. 2008., 22:08
Pozz, evo ovdje jedna upload skripta, moze nekome kasnije i posluzit.



<?php
$target = 'albums/ljudi/';
$extension = 'jpg';
$max_size = 100000;
$width_max = 1300;
$height_max = 800;
$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
?>

<?php
if(!empty($_POST['posted'])) {

if(!empty($_FILES['fichier']['name'])) {
if(substr($nom_file, -3) == $extension) {
$infos_img = getimagesize($_FILES['fichier']['tmp_name']);
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
echo '<b>Informacije:</b>';
echo '<hr />';
echo '<b>Slika:</b> ', $_FILES['fichier']['name'], '<br />';
echo '<b>Tezina :</b> ', $_FILES['fichier']['size'], ' Octets<br />';
echo '<b>Duzina :</b> ', $infos_img[0], ' px<br />';
echo '<b>Sirina :</b> ', $infos_img[1], ' px<br />';
echo '<hr />';
echo '<br /><br />';
} else {
// Sinon on affiche une erreur syst?e
echo '<b>Greska pri uploadu, pokusajte ponovo!</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour les dimensions et taille de l'image
echo '<b>Prevelika slika!</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour l'extension
echo '<b>samo .jpg molim !</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<b>Izaberi fotku!</b><br /><br />';
}
}
?> <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<b>Izaberite sliku sa vase lokacije:</b><br /><br />
<input type="hidden" name="posted" value="1" />
<input name="fichier" type="file" />
<input type="submit" value="Upload" />
</form>





E sad treba mi pomoc, ocu dole gdje je browse i Upload dugme kako mogu ubacit list box, da stavim recimo tri kategorije: ljudi, dogadjaji i gradovi. I da na osnovu tog list boxa meni mjenja gore u koji ce folder da uploaduje sliku, slab sam sa php pa molim pomoc.

staseprimate
03. 02. 2008., 01:09
pa stavis u web formu da korisnik izvrsi selekciju foldera/kategorije

<select name="kategorija">
<option value="ljudi">ljudi</option>
<option value="dogadjaji">dogadjaji</option>
<option value="gradovi">gradovi</option>
</select>

posle toga u php kodu ako sam dobro skontao samo stavis
$kategorija = $_POST['kategorija'];
$target = 'albums/$kategorija/';

pa ako je korisnik selektovao ljudi putanja ce biti albums/ljudi/, ako je odabrao gradove bice /albums/gradovi/

ako sam te uopste dobro razumeo :)

Dušan Dželebdžić
03. 02. 2008., 08:29
Obrati samo pažnju na to da ovim praviš ogroman bezbednosni propust, jer omogućavaš posetiocima da menjanjem jedne promenljive biraju u koji folder žele da postave fajl. Dodavanjem "../" mogu da se popnu jedan folder na gore, tako da mogu da ti upisuju fajlove gde god požele.

Bolja varijanta bi ti bila da opcije u formularu imaju numeričke vrednosti, a onda u funkciji u kojoj obrađuješ fajl staviš nešto tipa:
switch ($_POST['kategorija'])
{
case 1:
$folder="ljudi";
break;

case 2:
$folder="mesta";
break;
...

default:
$folder="svasta";
}
$target="/albums/$folder/";

ivanhoe
03. 02. 2008., 17:11
^ ne moraju nuzno da budu numericke vrednosti (teze za debug i naknadne prepravke koda kroz 2 godine), ali svakako treba koristiti switch/case da se mapiraju u realne putanje na disku. Ovo nije samo zbog sigurnosti, mada je to najvaznije, nego i zbog flexibilnosti - ako zelis da pomeris fajlove negde drugde samo promenis jedan case, sve ostalo radi transparentno..

Dušan Dželebdžić
03. 02. 2008., 17:58
^ my mistake, bio sam ubeđen da sam negde u postu napisao i "npr", kad sam predlagao brojeve :)

Ministar
03. 02. 2008., 19:58
U mom slucaju skriptom je ogranicen upload samo na jpg ekstenziju, tako i ako neko promjeni putanju i uploaduje u drugi folder nemoze nanijet stetu.

A na kraju krajeva ne kontam bas ako je list box na stranici i u njemu su zapisane opcije kako ce neko to promjenit.

Hvala na odgovoru.

Ministar
03. 02. 2008., 20:08
Imam problem:

Javlja mi ovu gresku:

Warning: move_uploaded_file(albums/$kategorija/moj-ipod.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory

ne moze da ucita vrijednost polja u varijablu ?

JovanT
03. 02. 2008., 20:17
Пошаљи део кода где се налази та линија. Делује ми као да Php ту променљиву третира као обичан текст. Вероватно си негде погрешио код наводника.

Ministar
05. 02. 2008., 20:31
<?php
$kategorija = $_POST['kategorija'];
$target = 'albums/$kategorija/';
$extension = 'jpg';
$max_size = 100000;
$width_max = 1300;
$height_max = 800;
$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
?>

<?php
if(!empty($_POST['posted'])) {

if(!empty($_FILES['fichier']['name'])) {
if(substr($nom_file, -3) == $extension) {
$infos_img = getimagesize($_FILES['fichier']['tmp_name']);
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
echo '<b>Informacije:</b>';
echo '<hr />';
echo '<b>Slika:</b> ', $_FILES['fichier']['name'], '<br />';
echo '<b>Tezina :</b> ', $_FILES['fichier']['size'], ' Octets<br />';
echo '<b>Duzina :</b> ', $infos_img[0], ' px<br />';
echo '<b>Sirina :</b> ', $infos_img[1], ' px<br />';
echo '<hr />';
echo '<br /><br />';
} else {
// Sinon on affiche une erreur syst?e
echo '<b>Greska pri uploadu, pokusajte ponovo!</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour les dimensions et taille de l'image
echo '<b>Prevelika slika!</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour l'extension
echo '<b>samo .jpg molim !</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<b>Izaberi fotku!</b><br /><br />';
}
}
?> <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<b>Izaberite sliku sa vase lokacije:</b><br /><br />

<select name="kategorija">
<option value="ljudi">ljudi</option>
<option value="dogadjaji">dogadjaji</option>
<option value="gradovi">gradovi</option>
</select>


<input type="hidden" name="posted" value="1" />
<input name="fichier" type="file" />
<input type="submit" value="Upload" />
</form>

Dušan Dželebdžić
05. 02. 2008., 23:48
http://www.jeroenmulder.com/weblog/2005/04/php_single_and_double_quotes.php

echo $var; // Results in the value of $var being printed
echo '$var'; // Results in the word '$var'
echo "$var"; // Results in the value of $var being printed

martovac
07. 02. 2008., 21:39
Mislim, ali nisam siguran da sam u pravu, da je problem u tome sto funkcija move_uploaded_file ne pronalazi folder u kome zelis da smestas slike!

Dušan Dželebdžić
07. 02. 2008., 21:56
Jesi, u pravu si.

Pošto smo u početničkim pitanjima, evo male mozgalice: Zašto funkcija ne pronalazi folder?

martovac
08. 02. 2008., 01:40
Jesi, u pravu si.

Pošto smo u početničkim pitanjima, evo male mozgalice: Zašto funkcija ne pronalazi folder?

Dusan, ja jesam pocetnik u ovome, priznajem, ali zelim da ucim!

Napravio sam previd, nisam video da je menjao kod odnosno da je postavio promenjljivu $kategorija i da je se ona nalazi izmedju ' ', a ne izmedju " ".

Dušan Dželebdžić
08. 02. 2008., 09:26
Nema šta da priznaješ, biti početnik nije loša stvar :1043:

Ono što u PHPu često zbunjuje programere koji su prešli iz drugih jezika, su upravo navodnici - u Delphiju i deda-Pascalu se koriste single quotes, u velikom broju ostalih double quotes, a PHP prihvata i jedne i druge. Problem je u tome što većina "preletača" ne primeti odmah da se single i double quotes ne shvataju isto, pa onda i dolazi do ovakvih bugova.

Da zaokružimo priču o navodnicima, da li znaš koja je razlika u funkcionalnosti između 'ovakvih' i `ovakvih` navodnika?

martovac
08. 02. 2008., 16:05
Nisam znao i nasao sam. Mislim da je ovo:

Sve sto se nalazi izmedju inverznih polunavodnika PHP pokusava da izvrsi kao
komandu zadatu na komandnoj liniji servera. Rezultat komande predstavlja vrednost
izraza.
Na primer, u operativnim sistemima tipa Unix mozete da upotrebite:
$out = `ls -la`;
echo '<pre>'.$out.'</pre>';
Ekvivalent tome na Windows serveru bilo bi:
$out = `dir c:`;
echo '<pre>'.$out.'</pre>';
Obe verzije ce generisati spisak datoteka u direktorijumu i dodeliti ga promenljivoj
$out.

martovac
08. 02. 2008., 16:21
Dusane mozes li da mi pojasnis neke stvari u par recenica?
Izlazim iz teme, ali samo par recenica i to je to!
Radi se o APACHE serveru, instaliranom na mom kompu.
Moj operativni sistem je WinXP, e sad kako radi moj instalirani APACHE?
Da li kao UNIX server ili kao Win server, s obzirom da je Windows oper. sistem?
U slucaju da je moj server WIN, da li to znaci da cu ja kasnije mozda imati probleme oko nekih kodova ako i postavim na Linux serverima
Bunim se jer znam da je PHP pisan za Linux platforme?
Mozda su glupa pitanjca, ali ne mogu da skontam to!

Gargoyle
08. 02. 2008., 21:23
^ Apache će ti raditi kao Apache server ;)
Apache je web server - a win i linuxi su OS.
Razlika ima, npr. na win-u ne postoji chmod, itd. ... uglavnom ako znas sta radis sve će ti raditi svuda.

ivanhoe
08. 02. 2008., 21:35
sa generalnim podesavanjima, koja tebe kao pocetnika zanimaju, apache ce se ponasati identicno i tvoj php ce raditi 99% identicno, znaci ne moras o tome mnogo da bhrines u pocetku

martovac
09. 02. 2008., 00:42
Ok, hvala vam na odgovorima Gargoyle and ivanhoe

Ministar
10. 02. 2008., 20:10
probo ja promjenit sa ' u " i sta se desava upladuje mi sliku na root i slika se zove $kategorijaNekaslika.jog


ne kontam, :(:please:

Ministar
18. 02. 2008., 20:01
Hajd molim vas, ako ko moze pomoci, ova upload skripta mi je super, sve sto trebam jest da ubacim list box, te s njim odaberem folder u koji ce raditi upload.

Plz pomozite malo, sa ovim sam se samo vise zbunio.

ivanhoe
18. 02. 2008., 21:16
ovako nesto:

<?php

$dirs = array('pera', 'zika/bla', 'mika'); //direktorijumi koje nudis kao izbor
$target = 'albums/ljudi/'; //osnovni dir u kome su svi ovi gore dir-ovi
$extension = 'jpg';
$max_size = 100000;
$width_max = 1300;
$height_max = 800;
$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];

if(!empty($_POST['posted'])) {

if( !in_array($_POST['lokacija'], $dirs) ) //zastita od hackera
die('Alo bre');

$path = $target . $_POST['lokacija'] . '/'; //ovo je cela putanja (koja mora da postoji)

if(!empty($_FILES['fichier']['name'])) {
if(substr($nom_file, -3) == $extension) {
$infos_img = getimagesize($_FILES['fichier']['tmp_name']);
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$path.$_FILES['fichier']['name'])) {
echo '<b>Informacije:</b>';
echo '<hr />';
echo '<b>Slika:</b> ', $_FILES['fichier']['name'], '<br />';
echo '<b>Tezina :</b> ', $_FILES['fichier']['size'], ' Octets<br />';
echo '<b>Duzina :</b> ', $infos_img[0], ' px<br />';
echo '<b>Sirina :</b> ', $infos_img[1], ' px<br />';
echo '<hr />';
echo '<br /><br />';
} else {
// Sinon on affiche une erreur syst?e
echo '<b>Greska pri uploadu, pokusajte ponovo!</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour les dimensions et taille de l'image
echo '<b>Prevelika slika!</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour l'extension
echo '<b>samo .jpg molim !</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<b>Izaberi fotku!</b><br /><br />';
}
}
?> <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">

<! -- izaberi dir ovde -->
<select name="lokacija">
<?php
foreach($dirs as $d)
echo "<option>$d</option>\n";
?>
</select>


<b>Izaberite sliku sa vase lokacije:</b><br /><br />
<input type="hidden" name="posted" value="1" />
<input name="fichier" type="file" />
<input type="submit" value="Upload" />
</form>

Ministar
19. 02. 2008., 08:32
hvala drugar, radi ovo :)