Jump to content
mrsec

php oop road learning - script file upload

Recommended Posts

Posted (edited)

Ma joc de ceva vreme cu php. Fac fel si fel de lucruri, le modific, incerc alte metode, functii, incerc sa gandesc problema din perspective diferite si evident ma blochez.

Am facut un script php, upload file, incerc sa abordez stilul oop, nu stiu cat de bine imi iasa, ce gresesc si ce fac bine, anyway, m-am blocat la ceva mediocru si nu inteleg ce gresesc.

Deci:

index.php

upload.php

check.php

edit: m-am grabit sa postez si am uitat sa specific unde m-am blocat :)), so, am 2 clase, una uploadeaza fisierul, alta verifica fisierul sa fie in anumiti parametri, e ceva simplu, extensia si marimea fisierului. Logica mea a fost:

Clasa UploadFile este mostenita de CheckFile, deci apelez clasa CheckFile, fac verificarea fisierelor IF size true -> next -> IF extension true -> upload. Dar nu imi iasa nici cum, atat am invartit lucrurile incat am lasat-o balta.

Nu luati in seama comentariile idioate din script, le folosesc sa ma ghidez :))..

Edited by mrsec
Posted

Sa le luam pe rand.Nu instantiezi clasa parinte in constructorul clasei derivata. Facem asta prin comanda "parent::__construct();" pe care o adaugam dupa linia "$this -> typefl = pathinfo($this->namefile, PATHINFO_EXTENSION);" in constructorul clasei CheckFile.

Alta problema e ca nu ai pus path-ul corect in clasa UploadFile in variabila $source. Tu ai pus /upload/, asta insemna ca sistemul incerca sa faca upload file_system/upload/ in loc de folderul_proiectului_tau/upload/. Indepardant / din fata problema asta e rezolvata. Asta e tot ce era necesar sa faci pentru ca proiectul sa functioneze, in rest ceea ce ai facut tu e ok.

Ca o regula, atunci cand ai de lucru cu path-uri (in linux) adaugang "/" in fata spui sistemului ca acel path pleaca de la baza sistemului de fisiere, daca vrei sa adaugi un fisier/folder existent in locatia curenta atunci pui path-ul acelui fisier/folder fara / in fata.

Posted

Intradevar, fisierul se uploadeaza, dar nu tine cont de verificarile impuse. Pot uploada fisiere .php, sau fisiere cu o marime peste cea setata in variabila $maxsize.

Posted

Ai dreptate, nu am analizat foarte atent functiile de verificare. Scuzele mele. Problema e la functia type, tu returnezi true daca tipul tau NU este in lista cu tipuri permise si false daca este. Mai mult, din cauza erori mele, nici macar nu se prelua tipul fisierului asta deoarece clasa parinte era instantiata prea tarziu.

primul lucru ce trebuie facut este sa muti "parent::__construct()" inaintea tuturor comenzilor din __construct-ul clasei CheckFile, astfel CheckFile::__construct devine:


function __construct(){
parent::__construct();
$this -> size = $_FILES["file"]["size"];
echo "size: " . $this->size . "<br>";
$this -> typefl = pathinfo($this->namefile, PATHINFO_EXTENSION);
echo "type: " . $this->typefl . "<br>";

}

Iar a 2-a ai 2 optiuni, fie inversezi returnurile functiei type fie pui ! in fata in_array.

astfel functia devenit fie:


public function type(){
if(in_array($this->typefl, $this->type)){
return true;
}
else{
return false;
}
}

fie


public function type(){
if(!in_array($this->typefl, $this->type)){
return false;
}
else{
return false;
}
}

Mai era o mica problema, in array-ul cu tipuri, ai pui ".txt" in loc de "txt" asta insemna ca orice fisier de tip txt nu era permis.

Posted

Multumesc, acum functioneaza conform cerintelor. Am zburat peste documentatia vitala a claselor, peste constructori si deconstructori si m-am blocat la o chestie simpla.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...