Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: podejrzane działanie is_uploaded_file()
Forum PHP.pl > Forum > PHP
yarexxx
Witajcie,

może ktokolwiek już się spotkał z podobną sytuacją: za pomocą is_uploaded_file() robię upload pliku przez formularz (type='file' name ='attach').
Skrypt wygląda tak:

  1. public function upload_single_file(){
  2.  
  3.  
  4. if(is_uploaded_file($_FILES['attach']['tmp_name']))
  5.  
  6. $this->file_path = "c:wamp/www/live/modules/hd/attachements/";
  7.  
  8. $this->file_itself = substr($_FILES['attach']['name'], 0, strrpos($_FILES['attach']['name'], ".")) . "_" . time() . "." . substr($_FILES['attach'] ['name'], strrpos($_FILES['attach']['name'], ".")+1);
  9.  
  10. move_uploaded_file($_FILES['attach']['tmp_name'], $this->file_path.$this->file_itself);
  11.  
  12. return $this->file_itself = "'".$this->file_itself."'";
  13. } else
  14.  
  15. {
  16. return $this->file_itself = "null";
  17.  
  18. }
  19.  
  20. }


Założenie jest takie, aby powyższa funkcja wywoływana przy SUBMIT formularza zwróciła nazwę pliczku jeżeli plik jest wysyłany lub null jeżeli pliku nie ma.
Problem polega na tym, że przy wskazaniu pliku (który na marginesie jest kopiowany do 'c:wamp/www/live/modules/hd/attachements/' i pojawia się tam) funkcja za każdym razem zwraca null - zarówno w przypadku kiedy plik ładujemy jak i w przypadku kiedy pliku nie ma.

Pls o spojrzenie 'świeżym okiem'.
smile.gif
melkorm
a nie brakuje Tobie klamry za IF'em?
yarexxx
Przeoczenie.. ale to nie to. Poniżej poprawiony kod, ta sama sytuacja..

  1. public function upload_single_file(){
  2.  
  3.  
  4. if(is_uploaded_file($_FILES['attach']['tmp_name']))
  5. {
  6.  
  7. $this->file_path = "c:wamp/www/live/modules/hd/attachements/";
  8.  
  9. $this->file_itself = substr($_FILES['attach']['name'], 0, strrpos($_FILES['attach']['name'], ".")) . "_" . time() . "." . substr($_FILES['attach']['name'], strrpos($_FILES['attach']['name'], ".")+1);
  10.  
  11. move_uploaded_file($_FILES['attach']['tmp_name'], $this->file_path.$this->file_itself);
  12.  
  13. return $this->file_itself = "'".$this->file_itself."'";
  14.  
  15. }
  16.  
  17. else {
  18. return $this->file_itself = "null";
  19. }
  20.  
  21. }
Zyx
Pierwsze pytanie, jakie się ciśnie, brzmi: a jaki to ma związek z programowaniem obiektowym?

Znając życie, pewnie masz skopany sam kod formularza, któremu brakuje atrybutu enctype="multipart/form-datas", co zmienia zupełnie działanie PHP. Inna sprawa, że funkcja is_uploaded_file() potrzebna Ci jest, jak piernik wiatrakowi. Jej funkcjonalność jest w całości wbudowana w move_uploaded_file(), zatem w Twoim przypadku nie ma żadnego racjonalnego powodu by jej używać. Koncentrujesz się na takich bzdetach, a nie robisz dość oczywistego testu na to czy zmienna $_FILES['attach'] w ogóle istnieje.
yarexxx
Związek ma taki, że jest to metoda w klasie do obsług plików.
Formularz nie zawiera błędów, po za tym enctype="multipart/form-data".
Z is_uploaded_file korzystam ponieważ potrzebuję aby metoda zwróciła mi tekst także wtedy jeżeli plik nie jest załączany.

PS.

tak jak pisałem plik jest przesyłany na serwer. Ale metoda zawsze zwraca null...
Zyx
Twój problem nie ma żadnego związku z programowaniem obiektowym, a to, że używasz metod, nie ma tu nic do rzeczy. Ponadto dokładnie ten sam efekt osiągniesz, stosując move_uploaded_file(). Jak wspomniałem, te funkcje są tożsame i w Twoim przypadku nie ma ŻADNEGO racjonalnego powodu, by używać is_uploaded_file(), a testowanie czy plik był załączany, jak również wspomniałem, powinno być robione w inny sposób.

Pierwsze to zrób sobie test:

  1. var_dump($_FILES);


by zobaczyć czy coś w ogóle dostajesz.

yarexxx
var_dump zwraca:

  1. array(1) {
  2. ["attach"]=> array(5)
  3. {
  4. ["name"]=> string(13) "Diagram1.jpeg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(23) "C:\wamp\tmp\phpFCD7.tmp" ["error"]=> int(0) ["size"]=> int(50377)
  5. }
  6. }


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.