mrsec Posted July 18, 2015 Report Posted July 18, 2015 (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.phpupload.phpcheck.phpedit: 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 July 18, 2015 by mrsec Quote
watsonAI Posted July 19, 2015 Report Posted July 19, 2015 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. Quote
mrsec Posted July 19, 2015 Author Report Posted July 19, 2015 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. Quote
watsonAI Posted July 19, 2015 Report Posted July 19, 2015 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. Quote
mrsec Posted July 19, 2015 Author Report Posted July 19, 2015 Multumesc, acum functioneaza conform cerintelor. Am zburat peste documentatia vitala a claselor, peste constructori si deconstructori si m-am blocat la o chestie simpla. Quote
watsonAI Posted July 19, 2015 Report Posted July 19, 2015 E treaba doar de atentie la detalii (ce si mie imi lipseste de multe ori). Succes in continuare, iar daca mai ai intrebari, posteaza Quote
JIHAD Posted July 22, 2015 Report Posted July 22, 2015 edit: m-am grabit sa postez si am uitat sa specific unde m-am blocat , so, am 2 claseMi-ai facut ziua. ))) Mersi. Quote