Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z podpięciem do konkretnego folderu skryptu wysyłającego plik.
Forum PHP.pl > Forum > Przedszkole
McDrone
Witam
Mam pewien problem ze skryptem. Pozwala wyłącznie na wysyłkę plików graficznych, sprawdzając jego wielkość i czy się nie powtarza do konkretnego folderu.
Działa, jeśli folder jest na w tej samej lokalizacji, co plik.php. Jeśli zmienię lokalizację wysyłki do innego folderu (./image/) też działa, ale zaprzestaje wysyłać komunikaty o postępach na poziomie sprawdzania czy się pliki nie dublują.
Tu działający kod:
  1. <?php
  2.  
  3. extract($HTTP_POST_VARS);
  4.  
  5. function menu()
  6. {
  7. $katalog=opendir('.');
  8. while(($element=readdir($katalog))!==FALSE)
  9. {
  10. $spis[]=$element;
  11. }
  12. echo '<form ACTION="'.$PHP_SELF.'" method="post" enctype="multipart/form-data">
  13. Upload Pliku: <input TYPE="file" name="plik" upload_max_filesize="3145728" size="50"><br>Do katalogu : <select name="cat">';
  14. foreach($spis as $wartosc)
  15. {
  16. if($wartosc!='..') echo '<option value="'.$wartosc.'">'.$wartosc.'</option>';
  17. }
  18. echo '</select><br><input type="submit" value="Uploaduj">
  19. <input type="hidden" name="action" value="upload">
  20. </FORM>';
  21. }
  22.  
  23. function upload() {
  24. global $cat,$_FILES;
  25. $ok=1;
  26. $accept = array('jpg','png','gif','bmp');
  27. $extension = substr($_FILES['plik']['name'],strrpos($_FILES['plik']['name'],'.')+1);
  28.  
  29. if($_FILES["plik"]["size"] > 3145728)
  30. {
  31. print 'Plik jest za duży !<br>';
  32. $ok=0;
  33. }
  34.  
  35. if(!in_array($extension,$accept))
  36. {
  37. echo 'Złe rozszerzenie, tylko jpg, gif, png, bmp.<br>';
  38. $ok=0;
  39. }
  40.  
  41. if ($ok==0)
  42. {
  43. print "Wybacz, twój plik nie dostał wysłany.";
  44. }
  45.  
  46. else
  47. {
  48. if(!file_exists($cat.'/'.$_FILES['plik']['name']))
  49. {
  50. $mask=umask(0);
  51. copy($_FILES['plik']['tmp_name'], "$cat/".$_FILES['plik']['name']);
  52. $plik=$_FILES['plik']['name'];
  53. @chmod($cat.'/'.$_FILES['plik']['name'],0777);
  54. umask($mask);
  55. if(file_exists($cat.'/'.$_FILES['plik']['name'])) echo 'Plik '.$plik.' został pomyślnie wgrany do katalogu '.$cat;
  56. else 'Podczas wgrywania pliku wystapił nieznany błąd !';
  57. }
  58. else echo 'Plik o takiej nazwie już istnieje, wybierz innš nazwę dla tego pliku !';
  59. }
  60. }
  61.  
  62. if (!isset($action)) $action="pokaz";
  63. switch($action)
  64. {
  65. case "pokaz":
  66. menu();
  67. break;
  68. default:
  69. upload();
  70. break;
  71. }
  72. ?>


A tutaj ze zmianą lokalizacji:
  1. <?php
  2.  
  3. extract($HTTP_POST_VARS);
  4.  
  5. function menu()
  6. {
  7. $katalog=opendir('./image/');
  8. while(($element=readdir($katalog))!==FALSE)
  9. {
  10. $spis[]=$element;
  11. }
  12. echo '<form ACTION="'.$PHP_SELF.'" method="post" enctype="multipart/form-data">
  13. Upload Pliku: <input TYPE="file" name="plik" upload_max_filesize="3145728" size="50"><br>Do katalogu : <select name="cat">';
  14. foreach($spis as $wartosc)
  15. {
  16. if($wartosc!='..') echo '<option value="'.$wartosc.'">'.$wartosc.'</option>';
  17. }
  18. echo '</select><br><input type="submit" value="Uploaduj">
  19. <input type="hidden" name="action" value="upload">
  20. </FORM>';
  21. }
  22.  
  23. function upload() {
  24. global $cat,$_FILES;
  25. $ok=1;
  26. $accept = array('jpg','png','gif','bmp');
  27. $extension = substr($_FILES['plik']['name'],strrpos($_FILES['plik']['name'],'.')+1);
  28.  
  29. if($_FILES["plik"]["size"] > 3145728)
  30. {
  31. print 'Plik jest za duży !<br>';
  32. $ok=0;
  33. }
  34.  
  35. if(!in_array($extension,$accept))
  36. {
  37. echo 'Złe rozszerzenie, tylko jpg, gif, png, bmp.<br>';
  38. $ok=0;
  39. }
  40.  
  41. if ($ok==0)
  42. {
  43. print "Wybacz, twój plik nie dostał wysłany.";
  44. }
  45.  
  46. else
  47. {
  48. if(!file_exists("./image/$cat.'/'".$_FILES['plik']['name']))
  49. {
  50. $mask=umask(0);
  51. copy($_FILES['plik']['tmp_name'], "./image/$cat/".$_FILES['plik']['name']);
  52. $plik=$_FILES['plik']['name'];
  53. @chmod("./image/$cat.'/'".$_FILES['plik']['name'],0777);
  54. umask($mask);
  55. if(file_exists("./image/$cat.'/'".$_FILES['plik']['name'])) echo 'Plik '.$plik.' został pomyślnie wgrany do katalogu '.$cat;
  56. else 'Podczas wgrywania pliku wystapił nieznany błąd !';
  57. }
  58. else echo 'Plik o takiej nazwie już istnieje, wybierz innš nazwę dla tego pliku !';
  59. }
  60. }
  61.  
  62. if (!isset($action)) $action="pokaz";
  63. switch($action)
  64. {
  65. case "pokaz":
  66. menu();
  67. break;
  68. default:
  69. upload();
  70. break;
  71. }
  72. ?>


Może ktoś mi podpowiedzieć gdzie albo w czym jest błąd?
IProSoft
Na szybko, nie sprawdzane.
  1. $dir = $_SERVER['DOCUMENT_ROOT'] . '/';
  2. function menu($dir)
  3. {
  4.  
  5. $katalog = opendir($dir);
  6.  
  7. while(($element = readdir($katalog)) !== false)
  8. {
  9. if( is_dir($element) ) $spis[] = $element;
  10. }
  11. echo '<form action="?action=upload" method="post" enctype="multipart/form-data">
  12. Upload Pliku: <input TYPE="file" name="plik" upload_max_filesize="3145728" size="50"><br>Do katalogu : <select name="cat">';
  13. foreach($spis as $wartosc)
  14. {
  15. if($wartosc != '.') echo '<option value="'.$wartosc.'">'.$wartosc.'</option>';
  16. }
  17. echo '</select><br><input type="submit" value="Uploaduj">
  18. <input type="hidden" name="action" value="upload">
  19. </FORM>';
  20. }
  21.  
  22. function upload($dir) {
  23. global $_FILES;
  24. $accept = array('jpg','png','gif','bmp');
  25. $extension = substr($_FILES['plik']['name'],strrpos($_FILES['plik']['name'],'.')+1);
  26.  
  27. if($_FILES["plik"]["size"] > 3145728)
  28. {
  29. return 'Plik jest za duży !<br>';
  30. }elseif(!in_array($extension, $accept))
  31. {
  32. return 'Złe rozszerzenie, tylko jpg, gif, png, bmp.<br>';
  33. }
  34. else
  35. {
  36. $katalog = $dir.$_POST['cat'];
  37. if( !file_exists($katalog."/".$_FILES['plik']['name']) )
  38. {
  39. $mask=umask(0);
  40. copy($_FILES['plik']['tmp_name'], $katalog."/".$_FILES['plik']['name']);
  41. $plik=$_FILES['plik']['name'];
  42. @chmod($katalog."/".$_FILES['plik']['name'],0777);
  43. umask($mask);
  44. if(file_exists($katalog."/".$_FILES['plik']['name']))
  45. {
  46. return 'Plik '.$plik.' został pomyślnie wgrany do katalogu '.$_POST['cat'];
  47. }
  48. else
  49. {
  50. return 'Podczas wgrywania pliku wystapił nieznany błąd !';
  51. }
  52. }
  53. else
  54. {
  55. return 'Plik o takiej nazwie już istnieje, wybierz innš nazwę dla tego pliku !';
  56. }
  57. }
  58. }
  59.  
  60. if (!isset( $_GET['action']) ) $action = "pokaz"; else $action = $_GET['action'];
  61. switch($action)
  62. {
  63. case "pokaz":
  64. menu($dir);
  65. break;
  66. default:
  67. echo upload($dir);
  68. break;
  69. }
McDrone
Niestety, nie działa.

Teraz nic nie odczytuje w wyborze. I wysyła pliki do katalogu głównego (server2go) a w cba.pl wyrzuca błąd (Podczas wgrywania pliku wystąpił nieznany błąd !)
Próba zmiany lokalizacji powoduje 2 błędy (w $katalog = opendir($dir); i while(($element = readdir($katalog)) !== false))

Taką mam strukturę (mniej więcej):
Strona:
index.php
naglowek.php
tenskrypt.php
Image:
folder1
folder2
folder3
IProSoft
Sprawdziłem na localu i działa poprawnie.

Jakie błędy zwraca Ci podczas zmiany ścieżki, sprawdź zmienną $_SERVER['DOCUMENT_ROOT'] czy wskazuje poprawną ścieżkę.
(podczas wysyłania z podkatalogu na niekrych serwerach wskaże nadrzędną, ew zastąp relatywną "/")
McDrone
Wybacz, miałeś racje. Działa.

Ale:
$dir = $_SERVER['DOCUMENT_ROOT'] . '/Upload/Test5/';
Po wpisaniu tego (Test5 to folder z skryptem) działa, wyświetla mi: '..' i 'image'. Jest wszystko ok.
Po dodaniu 'image’, bo tam chce, aby wszystko się odbywało ($dir = $_SERVER['DOCUMENT_ROOT'] . '/Upload/Test5/image/';) działa, ale zostawia mi wybór tylko '..' i wysyła pliki Test5.
Da się to obejść czy po prostu nie widzę oczywistego.
IProSoft
".." wskazuje katalog nadrzędny, aby usunąć z listy zastąp:

  1. if($wartosc != '.')

tym
  1. if($wartosc != '.' && $wartosc != '..')


A jeśli ma na liście pojawić się również do wybrania bierzący katalog, równy $dir:
przed

  1. foreach($spis as $wartosc)


wpisz

  1. echo '<option value="" selected="selected">Aktualny</option>';
McDrone
Źle rozpisałem się. Chodziło mi o to, że jeśli podam folder niżej niż folder przetrzymywania skryptu to opcje wyboru katalogu się nie generuje.

->serwer:
   ->strona: ---tutaj wszystko w porządku, podaje wybór 'image'.
      ->skrypt.php
      ->image: ---tutaj nawet nie chce generować listy. Wszystko wysłane ląduje tutaj.
         ->folder1
         ->folder2
         ->folder3
I czy to da się obejść.
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.