Script pentru upload-ul de fisiere (PHP)
Pagini: 1, 2, 3, 4, 5


DarkAngelBv


TUTORIAL UPLOAD SCRIPT.
Pentru inceput voi explica modul in care se poate crea un system pentru upload-ul fisierelor pe un site cu ajutorul PHP-ului.

Pas 1:
Se creeaza un fisier cu orice nume (fie el html sau php) acesta poate fii si un fisier deja existent, in care se doreste integrarea scriptului.
In acest fisier se va afla FORM-ul care preia calea spre fisier (ma voi limita la un singur fisier pentru a fii mai usor de observant modul de lucru).

CODE
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload" id="upload">
    <input type="file" name="fisier" />
    <br />
    <input type="submit" name="upload" value="Uploadeaza" />
      <input type="reset" name="resetare" value="Reseteaza" />
</form>


Explicatii:
1. form:
a. action – spune unde trimite datele culese din formular.
b. method – arata metoda de trimitere a datelor (in cazul acesta “post”)
c. enctype – spune ce tip de date sunt trimise.
d. name – numele formularului.
e. id – id-ul formularului.
2. Input-> type – specifica tipul campului :
a. file - camp fisier (un camp de tip “text” care mai are si butonul “Browse” pentru alegerea fisierului ce va fii uploadat).
b. submit – reprezinta butonul prin apasarea caruia se trimita datele catre fisierul speciaicat ca “action” (in cazul nostru upload.php).
c. reset – dupa cum ii spune si numele se refera la un buton care goleste datele din formular (este un buton suplimentar).

Pas 2:
Se mai creeaza un fisier numit “upload.php”:

CODE
<?
if ($_FILES["fisier"]["error"] > 0)
  {
    echo "A intervenit o eroare: " . $_FILES["fisier"]["error"] . "<br />";
    }
    else
    {
    if (file_exists("director/" . $_FILES["fisier"]["name"]))  // verificam daca fisierul exista deja pe server
     {
          echo "Fisierul pe care incerci sa-l uploadezi exista deja";
       }
    else
    {
    move_uploaded_file($_FILES["fisier"]["tmp_name"], "director/".$_FILES["fisier"]["name"]);  // se muta fisierul din directorul temporar al serverului in directorul final
     }
}
?>


NOTA: Cuvantul “director” poate fii inlocuit cu orice nume, reprezentand directorul unde vor fii adaugate fisierele uploadate.
Desigur se mai pot adauga si alte tipuri de conditii pentru limitarea tipurilor de fisiere ce pot fii uploadate sau dimensiunea lor.
Campurile care sunt pasate in array-ul $_FILES[‘fisier’] (unde “fisier” = numele dat campului de tip “file” in primul formular) sunt urmatoarele:
name – numele sub care este stocat fisierul pe computerul dumneavostra.
type – tipul fisierului.
tmp_name – numele temporar sub care este stocat fisierul pe server.
error – erorea (in mod normal 0 biggrin.gif ).
size – marimea fisierului (in bytes).


Sper ca am explicat destul de clar cum sta treaba cu „upload file”.
Bold
Probabil ar trebui sa existe si niste filtre, sa nu se poata urca orice balarie de fisier. In special fisiere executabile.
 
DarkAngelBv
QUOTE(Bold @ Mar 23 2007, 06:13) [snapback]2607185[/snapback]
Probabil ar trebui sa existe si niste filtre, sa nu se poata urca orice balarie de fisier. In special fisiere executabile.


Filtrele se pot pune foarte usor... spre exemplu mai jos am modificat scriptul sa nu permita upload-ul de fisiere.exe:
QUOTE
<?
if ($_FILES["fisier"]["error"] > 0)
{
echo "A intervenit o eroare: " . $_FILES["fisier"]["error"] . "<br />";
}
else
{
if($_FILES["fisier"]["type"] != "application/x-msdos-program"){ // verificam daca fisierul este executabil

if (file_exists("director/" . $_FILES["fisier"]["name"])) // verificam daca fisierul exista deja pe server
{
echo "Fisierul pe care incerci sa-l uploadezi exista deja";
}
else
{
move_uploaded_file($_FILES["fisier"]["tmp_name"], "director/".$_FILES["fisier"]["name"]); // se muta fisierul din directorul temporar al serverului in directorul final
}
}
else
{
die("Fisier invalid.");
}
}
?>
gr8kis
salutare problema la mn este .. ca dak incerc sa upl o melodie imi spune : 1. A intervenit o eroare: 1 / 2. acest fisier exista deja ... cu toate ca nu exista...ce pot face ??
DarkAngelBv
pune codul exact care il folosesti (PHP-ul si form-ul ) sa vedem cu ce te putem ajuta.
cris123
QUOTE(darkangelbv @ Mar 22 2007, 18:30) [snapback]2604966[/snapback]
TUTORIAL UPLOAD SCRIPT.
Pentru inceput voi explica modul in care se poate crea un system pentru upload-ul fisierelor pe un site cu ajutorul PHP-ului.

Pas 1:
Se creeaza un fisier cu orice nume (fie el html sau php) acesta poate fii si un fisier deja existent, in care se doreste integrarea scriptului.
In acest fisier se va afla FORM-ul care preia calea spre fisier (ma voi limita la un singur fisier pentru a fii mai usor de observant modul de lucru).

CODE
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload" id="upload">
    <input type="file" name="fisier" />
    <br />
    <input type="submit" name="upload" value="Uploadeaza" />
      <input type="reset" name="resetare" value="Reseteaza" />
</form>


Explicatii:
1. form:
a. action – spune unde trimite datele culese din formular.
b. method – arata metoda de trimitere a datelor (in cazul acesta “post”)
c. enctype – spune ce tip de date sunt trimise.
d. name – numele formularului.
e. id – id-ul formularului.
2. Input-> type – specifica tipul campului :
a. file - camp fisier (un camp de tip “text” care mai are si butonul “Browse” pentru alegerea fisierului ce va fii uploadat).
b. submit – reprezinta butonul prin apasarea caruia se trimita datele catre fisierul speciaicat ca “action” (in cazul nostru upload.php).
c. reset – dupa cum ii spune si numele se refera la un buton care goleste datele din formular (este un buton suplimentar).

Pas 2:
Se mai creeaza un fisier numit “upload.php”:

CODE
<?
if ($_FILES["fisier"]["error"] > 0)
  {
    echo "A intervenit o eroare: " . $_FILES["fisier"]["error"] . "<br />";
    }
    else
    {
    if (file_exists("director/" . $_FILES["fisier"]["name"]))  // verificam daca fisierul exista deja pe server
     {
          echo "Fisierul pe care incerci sa-l uploadezi exista deja";
       }
    else
    {
    move_uploaded_file($_FILES["fisier"]["tmp_name"], "director/".$_FILES["fisier"]["name"]);  // se muta fisierul din directorul temporar al serverului in directorul final
     }
}
?>


NOTA: Cuvantul “director” poate fii inlocuit cu orice nume, reprezentand directorul unde vor fii adaugate fisierele uploadate.
Desigur se mai pot adauga si alte tipuri de conditii pentru limitarea tipurilor de fisiere ce pot fii uploadate sau dimensiunea lor.
Campurile care sunt pasate in array-ul $_FILES[‘fisier’] (unde “fisier” = numele dat campului de tip “file” in primul formular) sunt urmatoarele:
name – numele sub care este stocat fisierul pe computerul dumneavostra.
type – tipul fisierului.
tmp_name – numele temporar sub care este stocat fisierul pe server.
error – erorea (in mod normal 0 biggrin.gif ).
size – marimea fisierului (in bytes).
Sper ca am explicat destul de clar cum sta treaba cu „upload file”.




Salut,

Am vazut si eu codul pt upload de fisiere, si am incercat sa il folosesc. Imi apare o eroare la Upload, si anume:
"A intervenit o eroare: 1" si nu-mi dau seama de la ce este. Sau cateodata nu apare eroarea deloc, dar cand ma uit fisierul nu e uploadat.
Mentionez ca siteul meu exte gazduit pe lx.ro. Acolo am creat un director anume pt pozele pe care vreau sa le pot uploada si am schimbat numele si in upload.php la director. Te rog daca se poate sa ma ajuti
Multumesc ,
Cristina
activinfo
Salutare
Am urmat pasii de mai sus insa imi apare urmatoarea eroare:

Warning: move_uploaded_file(director/pl.png) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/activinf/public_html/up.php on line 14

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpl3PGFC' to 'director/pl.png' in /home/activinf/public_html/up.php on line 14
 
zend112
Mai oameni da' mai cititi si manualul cu functiile nu asteptati totu mura'n'gura.

@activinfo Problema la tine este ca nu poate sa puna .png-ul acolo deoarece nu are drepturi. Schimba CHMOD la 777 si sa vezi ca se va intampla minunea smile.gif
pstdgt
QUOTE(darkangelbv @ Mar 22 2007, 18:30) [snapback]2604966[/snapback]
TUTORIAL UPLOAD SCRIPT.
...


Sugestie: o verificare in plus folosind functia is_uploaded_file()
vp-emanuel


Am si eu codul acesta :

CODE
<?php
$target = "upload/";
$target = $target . basename( $_FILES['uploaded']['name']);
$ok=1;


if ($userfile_size >350000){$msg=$msg."Your uploaded file size is more than 350KB so please reduce the file size and then upload.<BR>";
$file_upload="false";}


if (!($userfile_type =="image/jpeg" OR $userfile_type=="image/gif")){$msg=$msg."Your uploaded file must be JPG or GIF. Other file types are not allowed<BR>";
$file_upload="false";}



if ($ok==0)
{
Echo "Sorry your file was not uploaded";
}


else
{
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
echo "The file ".

basename( $_FILES['uploadedfile']['name']). " has been uploaded";
}
else
{
echo "Sorry, there was a problem uploading your file.";
}
}
?>


CODE
<form enctype="multipart/form-data" action="upload.php" method="POST">
Please choose a file: <input name="uploaded" type="file"><br>
<input type="submit" value="Upload">
</form>




si imi da aceasta eroare :


CODE
Warning: move_uploaded_file(upload/poza2.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/siteulmeu/public_html/upload.php on line 24

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpgKShYq' to 'upload/poza2.jpg' in /home/siteulmeu/public_html/upload.php on line 24
Sorry, there was a problem uploading your file.





Folderul creat este upload
Imi spune-ti si mie va rog ce am gresit ?


vp-emanuel
Am descoperit singur ce gresism :
trebuia sa dau chmod 777 folderului upload
Eu dadusem fisierului upload.php wallbash.gif
Cu toate ca functioneaza, nu functioneaza cum doream :
1) am specificat sa nu uploadeze numai fisiere cu extensia jpg si gif dar imi uploadeaza fara nici o grija si exe si png
2) am specificat sa nu imi uploadeze fisiere mai mari de 350kb, intr-adevar nu le uploadeaza dar in loc sa imi dea eroarea
Your uploaded file size is more than 350KB so please reduce the file size and then upload imi da :
Sorry, there was a problem uploading your file.
huh.gif

Later Edit
Tocmai ce am uploadat un fisier de 700kb deci nu mi le filtreaza nici dupa marime.
vp-emanuel
Am un script de upload (PHP) care functioneaza perfect.
Ofer 20 RON celui care imi face o mica modificare.
Astept MP.
vp-emanuel
QUOTE(vp-emanuel @ Jun 1 2007, 20:32) [snapback]2914221[/snapback]
Am un script de upload (PHP) care functioneaza perfect.
Ofer 20 RON celui care imi face o mica modificare.
Astept MP.


Rezolvat
DarkAngelBv
Dupa ~14 ore de munca am terminat prima versiune a scriptului de upload.
este bazat 100% pe functii, deci ii puteti schimba designul foarte usor, sau sa-i integrati intr-un site deja existent.
Astept pareri si sugestii pentru versiunile viitoare.

Pentru urmatoarea versiune momentan doresc:
1. Sistem de "numarare" a download-urilor.
2. Sistem de trimitere a emailurilor in masa de catre admin (De exemplu trimiterea notificarilor despre noile facilitati oferite de site)
3. Sistem de "Star Rating" pentru fisiere.
4. Sistem de search.
5. Limitarea spatiului total ocupat de fisierele unui utilizator (Bineinteles, cu posibilitatea de a modifica din panoul de administrator limita pentru toti utilizatorii sau pentru fiecare in parte).

Dupa dezarhivarea si uploadarea fisierelor trebuie sa:
Setati permisiune 777 pe fisierul comfig.php, fisierul admin/admin.log si pe directorul upload/
Dupa instalare (Simpla accesare a locatiei unde ati copiat fisierele porneste instalarea):
Pentru siguranta stergeti directorul instalare si setati permisiune de citire pe config.php
Nu dati cu paru` daca mai gasiti greseli, avand in vedere cat este ceasul acum rolleyes.gif

Click pentru a vizualiza atașamentul
mariusc
QUOTE(darkangelbv @ Jun 25 2007, 02:59) [snapback]3011490[/snapback]
Dupa ~14 ore de munca am terminat prima versiune a scriptului de upload.
este bazat 100% pe functii, deci ii puteti schimba designul foarte usor, sau sa-i integrati intr-un site deja existent.
Astept pareri si sugestii pentru versiunile viitoare.

Pentru urmatoarea versiune momentan doresc:
1. Sistem de "numarare" a download-urilor.
2. Sistem de trimitere a emailurilor in masa de catre admin (De exemplu trimiterea notificarilor despre noile facilitati oferite de site)
3. Sistem de "Star Rating" pentru fisiere.
4. Sistem de search.
5. Limitarea spatiului total ocupat de fisierele unui utilizator (Bineinteles, cu posibilitatea de a modifica din panoul de administrator limita pentru toti utilizatorii sau pentru fiecare in parte).

Dupa dezarhivarea si uploadarea fisierelor trebuie sa:
Setati permisiune 777 pe fisierul comfig.php, fisierul admin/admin.log si pe directorul upload/
Dupa instalare (Simpla accesare a locatiei unde ati copiat fisierele porneste instalarea):
Pentru siguranta stergeti directorul instalare si setati permisiune de citire pe config.php
Nu dati cu paru` daca mai gasiti greseli, avand in vedere cat este ceasul acum rolleyes.gif

Click pentru a vizualiza atașamentul



darkangelbv: Este super ideea ta. Chiar era nevoie de asa ceva. Felicitari!
Am incercat scriptul tau, arata bine, dar imi da mereu o eroare cand incerc sa uploadez un fisier video (.avi)
"Tipul fisierului nu este permis. video/avi"
Precizez ca am trecut si la marimea fisierului 50000 KB si la tipuri de fisere permise: avi mpg mpeg jpg

Eu am serverul pe linux si din linia de comanda am dat:
chmod 777 config.php
chmod 777 admin/admin.txt
chmod 777 upload/

vreo greseala undeva?
DarkAngelBv
trebuie trecuta extensia (.avi) iar daca nu merge adaugi la "tipuri de fisiere permise"
CODE
video |
si ar trebui sa mearga... in versiunile viitoare voi lasa filtru doar dupa extensie.
danny_DC
Am scris si eu un cod asemanator si nu mi se muta fisierul fin folderul temporal. Daca stiti care e problema si ma puteti ajuta va raman dator rolleyes.gif
DarkAngelBv
QUOTE(danny_DC @ Jul 1 2007, 20:14) [snapback]3042172[/snapback]
Am scris si eu un cod asemanator si nu mi se muta fisierul fin folderul temporal. Daca stiti care e problema si ma puteti ajuta va raman dator rolleyes.gif

1. Se scrie temporar nu temporal tongue.gif
2. Ai dat CHMOD 777 la directorul unde vrei sa se faca upload-ul?
DarkAngelBv
Pentru cei care folosesc scriptul, ma bucur ca va place, dar NU MAI STERGETI nota de copyright.
Macar bun simt aveti si voi scratchchin.gif
xnoise
o alta alternativa, mult mai complexa si mai completa o gasiti pe link. Ceea ce e acolo este o clasa foarte usor de folosit, ce permite uploadarea si filtrarea fisierelor uploadata in functie de multi parametri.

Pentru imagini sunt cateva extra-uri care folosesc libraria GD din php pentru modificarea imaginilor (resize, watermark, background, etc). este de asemenea foarte bine documentata, gasiti acolo toate metodele si variabilele necesare utilizarii clasei. De asemenea gasiti si exemple, care sunt destul de simple.

ATENTIE!!! image_resize nu functioneaza cu GD 2.19 (se va repara in curand, cel putin asa promite autorul clasei).
Clasa de mai sus este folositoare atat incepatorilor in PHP cat si avansatilor, scapandu-va de multe probleme. Eu o folosesc de vreo 3 luni si nu am avut probleme cu ea pana acum.

pentru evitarea problemelor cu versiuni mai noi ale GD-ului, poate ar fi bine sa folositi informatia din phpinfo si daca versiunea de GD este mai mare de 2, sa nu aplicati resize. Restul functiilor (cel putin cele testate de mine par a functiona). Din timp in timp verificati changelogul. Ultimul update al clasei a fost facut pe 25 mai 2007, deci este up-to-date (cel putin aproape up-to-date).

Imi cer scuze pt linkul de mai sus, dar cred ca este util pt toti. Mentionez faptul ca respectiva clasa am gasit-o pe phpclasses. Pentru orice altceva aveti nevoie, un search va poate rezolva rapid problema. Daca mai sunteti si avansati, puteti customiza clasele pentru a le folosi cum doriti.

Later edit: nu e nevoie sa chmodati directorul in care copiati imaginea sau sa creati directorul.Clasa va incerca automat sa chmodeze respectivul director sau sa il creeze. Daca nu are drepturi, atunci va trebui sa chmodati manual respectivul director. Dar in general nu e cazul pt asa ceva.
tommygirl
cum pot sa combin, in flash, functia de upload cu un contact form? astfel incat cand apas pe buton sa se urce si file-ul si continutul formularului?
wyrws
cum chmodez un folder.... sunt incepator si vreau sa fac o pagina de upload pe xhost.ro... se poate macar?
tommygirl
QUOTE(tommygirl @ Jul 9 2007, 12:29) [snapback]3076735[/snapback]
cum pot sa combin, in flash, functia de upload cu un contact form? astfel incat cand apas pe buton sa se urce si file-ul si continutul formularului?


in ftp.
xnoise
@wyrws: te duci in ftp, click dreapta pe director, si da-i 755 (in cazuri rare ai nevoie de 777). In total commander (daca il folosesti ca client de ftp) selectezi directorul si te duci in file->properties si faci acelasi lucru. Trebuie avut in vedere ce anume ai voie sa urci pe server si daca e server gratuit, daca iti este permis uploadul.

@tommy: probabil e o tehnologie bazata pe actionscript, xml si php. Ceva similar cu ajax. Mai multe detalii nu stiu sa iti dau.
aj-stiles
darck am instalat si eu scriptul tau... totul bine si frumos dar cand vreau sa vizoalizez o poza care am uploadato imi apare eroare de la lx.ro ca nu exista fisierul :| www.paint.haos.ro/index.php/upload/alex.jpg
Pagini: 1, 2, 3, 4, 5
Aceasta este o versiune simplificată a paginii originale. Pentru a vizita versiunea originala click aici.