Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy ten kod jest dobry i optymalny?
Forum PHP.pl > Forum > PHP
Balus
  1. <?php
  2. $haslo = 'tajnehaslo';
  3. $f_haslo = $_POST['haselko'];
  4. $p_tmp = $_FILES['pliczek']['tmp_name'];
  5. $p_nazwa = $_FILES['pliczek']['name'];
  6. $p_rozmiar = $_FILES['pliczek']['size'];
  7. // $p_typ = $_FILES['pliczek']['type'];
  8. // $p_blad = $_FILES['pliczek']['error'];
  9.  
  10. if($f_haslo != $haslo)
  11. {
  12. echo 'Niepoprawne haslo!';
  13. }
  14. else
  15. {
  16. if(is_uploaded_file($f_tmp))
  17. {
  18. move_uploaded_file($p_tmp, '/pliczki/'$p_nazwa);
  19. echo 'Plik <strong>'.$p_nazwa.'</strong> ('.$p_rozmiar.') zostal wrzucony na serwer!';
  20. }
  21. else
  22. {
  23. echo 'Blad podczas wrzucania pliku!';
  24. }
  25. }
  26. ?>

Tak jak w temacie winksmiley.jpg
Czy ten kod jest dobry i optymalny?
Szczególnie chodzi mi o move_uploaded_files
MateuszS
Tzn jeżeli jest to do jakiegoś Hostingu czy coś to trochę źle, bo ci ktoś może plik PHP wrzucić na serwer a potem rzeźnia - po stronie ;D Właściwie nawet jeżeli tylko ty z tego korzystasz powinieneś jakoś to zabezpieczyć. No i skąd wiesz że plik zostanie wrzucony?

  1. @ $a=move_uploaded_file($p_tmp, '/pliczki/'$p_nazwa);
  2. if($a==true)
  3. echo 'Plik <strong>'.$p_nazwa.'</strong> ('.$p_rozmiar.') zostal wrzucony na serwer!';
  4. else
  5. echo 'Blad';
phpion
O jaką optymalność Ci chodzi? W takim krótkim kodzie ciężko cokolwiek spaprać. A jednak:
- niepotrzebnie tworzysz tyle zmiennych dla $_FILES,
- komunikat błędu nie sprawdza czy upload się powiódł, tylko czy jest plik do uploadu (dodaj analogiczny warunek dla funkcji move_uploaded_file).
Balus
  1. <?php
  2. $haslo = 'tajnehaslo';
  3. $f_haslo = $_POST['haselko'];
  4. $p_tmp = $_FILES['pliczek']['tmp_name'];
  5. $p_nazwa = $_FILES['pliczek']['name'];
  6. $p_rozmiar = $_FILES['pliczek']['size'];
  7.  
  8. if($f_haslo != $haslo)
  9. {
  10. echo 'Niepoprawne haslo!';
  11. }
  12. else
  13. {
  14. if(is_uploaded_file($f_tmp))
  15. {
  16. $przenies = move_uploaded_file($p_tmp, $p_nazwa);
  17. if($przenies == true)
  18. {
  19. echo 'Plik <strong>'.$p_nazwa.'</strong> ('.$p_rozmiar.') zostal wrzucony na serwer!';
  20. }
  21. else
  22. {
  23. echo 'Blad podczas przenoszenia pliku!';
  24. }
  25. }
  26. else
  27. {
  28. echo 'Blad podczas wrzucania pliku!';
  29. }
  30. }
  31. ?>

A teraz co powiecie? :]
darko
  1. $przenies = move_uploaded_file($p_tmp, $p_nazwa);
  2. if($przenies == true)
  3. {
  4. echo 'Plik <strong>'.$p_nazwa.'</strong> ('.$p_rozmiar.') zostal wrzucony na serwer!';
  5. }
  6. else
  7. {
  8. echo 'Blad podczas przenoszenia pliku!';
  9. }


zamieniłbym na

  1. if(move_uploaded_file($p_tmp, $p_nazwa)) {
  2. echo 'Plik <strong>'.$p_nazwa.'</strong> ('.$p_rozmiar.') zostal wrzucony na serwer!';
  3. }
  4. else {
  5. echo 'Blad podczas przenoszenia pliku!';
  6. }
Balus
  1. if(move_uploaded_file($p_tmp, $p_nazwa)) {
  2. echo 'Plik <strong>'.$p_nazwa.'</strong> ('.$p_rozmiar.') zostal wrzucony na serwer!';
  3. }
  4. else {
  5. echo 'Blad podczas przenoszenia pliku!';
  6. }

if(move_uploaded_file($p_tmp, $p_nazwa)) {
pierw chyba trzeba php rozkazac przeniesc ten plik zeby potem sprawdzic czy zostal przeniesiony smile.gif
poprawcie mnie jesli zle mowie tongue.gif
darko
Nie mogę coś edytować, więc napiszę nowego posta. Popracowałbym na tym
1. $f_haslo = $_POST['haselko']; - w ogóle nie filtrujesz danych z formularza
2. przed move_uploaded_file sprawdzałbym za pomocą ini_get czy $p_rozmiar jest mniejszy/równy maksymalnemu dopuszczalnemu i jesli jest, dopiero move_uploaded_file

Cytat
poprawcie mnie jesli zle mowie

Poprawiam: źle mówisz, sam sprawdź
Balus
1.
  1. $f_haslo = strip_tags(HTMLSpecialChars($_POST['haselko']));

Tyle wystarczy czy jeszcze jkaieś metody filtrowania polecacie? smile.gif
2
  1. if($p_rozmiar >= 666)
  2. {
  3. ...
  4. }

cos takiego? smile.gif
darko
Z wartości ini_get("upload_max_filesize") usuń literę "M" na końcu, przelicz sobie na bajty tę wartość, bo z tego, co pamiętam $_FILES["jakis_name"]["size"] zwraca rozmiar w bajtach i potem:
sprawdź czy $_FILES["jakis_name"]["error"] == 0 (czyli wszystko OK) i:

if($p_rozmiar <= $przeliczone_na_bajty && $_FILES["jakis_name"]["error"] == 0) {
move_uploaded_file...
wookieb
Cytat(darko @ 30.11.2009, 15:59:35 ) *
przelicz sobie na bajty wartość ini_get("upload_max_filesize"), bo z tego, co pamiętam $_FILES["jakis_name"]["size"] zwraca rozmiar w bajtach i potem:
if($p_rozmiar <= $przeliczone_na_bajty) {

maksymalny rozmiar wysyłanego pliku
Balus
Ok dla wszystkich pomógł winksmiley.jpg
troszkę pokombinuję i odezwę się smile.gif
Proszę o nie zamykanie tematu smile.gif
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.