Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [swfupload] Problem z nadpisywaniem istniejących plików
deha21
post
Post #1





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


Witam,
W sumie nie wiem czy to bardziej flash czy php (bo flasha nie znam) ale mam problem z SWFUpload (www.swfupload.org). Używam go do mojego cmsa. Problem jest taki, że gdy wgrywam plik który już istnieje na serwerze to go nadpisuje. A powinien wyskoczyć komunikat, że plik istnieje. To raczej ten kod:
  1. // Validate that we won't over-write an existing file
  2. if (file_exists($save_path . $file_name)) {
  3. HandleError("Plik o tej nazwie już istnieje"); // moje spolszczenie ;)
  4. exit(0);
  5. }


Niestety nie działa :/ Próbowałem robić if'y przy kodzie wgrywania plików na serwer ale też nic. To ten kod (bez mojej przeróbki):
  1. if (!@move_uploaded_file($_FILES[$upload_name]["tmp_name"], '../'.$_POST['directory'].'/'.$file_name)) {
  2. HandleError("Błąd przy wgrywaniu pliku. Sprawdź czy taki plik już nie istnieje.");
  3. exit(0);
  4. }


Pomożecie?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
  1. if (file_exists($save_path . $file_name)) {

Fajnie, że wiemy, jak są deklarowane te zmienne.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
deha21
post
Post #3





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


Racja. Trochę za dużo kodu, żeby to pokazać więc streszczę to tak:
$file_name - nazwa pliku, prawidłowo przesyłana (bo zapisuje uploadowany plik pod tą nazwą)
$save_path - właśnie obadałem skrypt dokładniej i stwierdziłem, że nie ma jej zdeklarowanej, więc zamiast niej wrzuciłem konkretną ścieżkę:
  1. if (file_exists('../'.$_POST['directory'].'/'.$file_name)) {
  2. HandleError("Plik o tej nazwie już istnieje.");
  3. exit(0);
  4. }


I nic :/


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Może lepiej wrzuć cały skrypt uploadu...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
deha21
post
Post #5





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. // Check post_max_size (http://us3.php.net/manual/en/features.file-upload.php#73762)
  4. $POST_MAX_SIZE = ini_get('post_max_size');
  5. $unit = strtoupper(substr($POST_MAX_SIZE, -1));
  6. $multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));
  7.  
  8. if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
  9. header("HTTP/1.1 500 Internal Server Error"); // This will trigger an uploadError event in SWFUpload
  10. echo "Za duży rozmiar pliku.";
  11. exit(0);
  12. }
  13.  
  14. // Settings
  15. // The path were we will save the file (getcwd() may not be reliable and should be tested in your environment)
  16. $upload_name = "Filedata";
  17. $max_file_size_in_bytes = 2147483647; // 2GB in bytes
  18. $extension_whitelist = array("jpg", "gif", "png","bmp","jpeg","tiff","txt","doc","docx","rtf","odt","pdf","zip","rar","mp3","wav","midi","wma","ogg","mpg","mpeg","avi","flv","mp4","wmv","swf","pdf"); // Allowed file extensions
  19. $valid_chars_regex = '.A-Z0-9_ !@#$%^&()+={}\[\]\',~`-'; // Characters allowed in the file name (in a Regular Expression format)
  20.  
  21. // Other variables
  22. $MAX_FILENAME_LENGTH = 260;
  23. $file_name = "";
  24. $file_extension = "";
  25. $uploadErrors = array(
  26. 0=>"Pliki wgrane poprawne",
  27. 1=>"Za duży rozmiar pliku (sprawdź php.ini)",
  28. 2=>"Za duży rozmiar pliku (sprawdź plik akcji)",
  29. 3=>"Tylko niektóre pliki zostały wgrane",
  30. 4=>"Żaden plik nie został wgrany",
  31. 6=>"Brak tymczasowego folderu"
  32. );
  33.  
  34. // Validate the upload
  35. if (!isset($_FILES[$upload_name])) {
  36. HandleError("No upload found in \$_FILES for " . $upload_name);
  37. exit(0);
  38. } else if (isset($_FILES[$upload_name]["error"]) && $_FILES[$upload_name]["error"] != 0) {
  39. HandleError($uploadErrors[$_FILES[$upload_name]["error"]]);
  40. exit(0);
  41. } else if (!isset($_FILES[$upload_name]["tmp_name"]) || !@is_uploaded_file($_FILES[$upload_name]["tmp_name"])) {
  42. HandleError("Upload failed is_uploaded_file test.");
  43. exit(0);
  44. } else if (!isset($_FILES[$upload_name]['name'])) {
  45. HandleError("Plik nie ma nazwy.");
  46. exit(0);
  47. }
  48.  
  49. // Validate the file size (Warning: the largest files supported by this code is 2GB)
  50. $file_size = @filesize($_FILES[$upload_name]["tmp_name"]);
  51. if (!$file_size || $file_size > $max_file_size_in_bytes) {
  52. HandleError("Za duży rozmiar pliku");
  53. exit(0);
  54. }
  55.  
  56. if ($file_size <= 0) {
  57. HandleError("File size outside allowed lower bound");
  58. exit(0);
  59. }
  60.  
  61. // Validate file name (for our purposes we'll just remove invalid characters)
  62. $file_name = preg_replace('/[^'.$valid_chars_regex.']|\.+$/i', "", basename($_FILES[$upload_name]['name']));
  63. if (strlen($file_name) == 0 || strlen($file_name) > $MAX_FILENAME_LENGTH) {
  64. HandleError("Nieprawidłowa nazwa pliku");
  65. exit(0);
  66. }
  67.  
  68. // Validate that we won't over-write an existing file
  69. if (file_exists('../'.$_POST['directory'].'/'.$file_name)) {
  70. HandleError("Plik o tej nazwie już istnieje.");
  71. exit(0);
  72. }
  73.  
  74. // Validate file extension
  75. $path_info = pathinfo($_FILES[$upload_name]['name']);
  76. $file_extension = $path_info["extension"];
  77. $is_valid_extension = false;
  78. foreach ($extension_whitelist as $extension) {
  79. if (strcasecmp($file_extension, $extension) == 0) {
  80. $is_valid_extension = true;
  81. break;
  82. }
  83. }
  84. if (!$is_valid_extension) {
  85. HandleError("Nieprawidłowe rozszrzenie pliku.");
  86. exit(0);
  87. }
  88.  
  89. if (!@move_uploaded_file($_FILES[$upload_name]["tmp_name"], '../'.$_POST['directory'].'/'.$file_name)) {
  90. HandleError("Błąd przy wgrywaniu pliku.");
  91. exit(0);
  92. }
  93.  
  94. exit(0);
  95.  
  96. function HandleError($message) {
  97. echo $message;
  98. }
  99. ?>


--------------------
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Lepiej sprawdź czy masz safe_mode na serwerze winksmiley.jpg Jeśli tak to file_exists może Ci wywalać false nawet gdy plik istnieje ;]


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
deha21
post
Post #7





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


Nie wiem czy jest włączone, nie chce mi się sprawdzać winksmiley.jpg Ale w innych skryptach file_exists działa jak należy więc to raczej nie to.

Ktoś pomoże?
Safe_mode czy włączone, czy wyłączone nic nie zmienia.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




a clearstatcache przed file_exists?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
deha21
post
Post #9





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


Hmm nie wiem czy to dobrze stosuje ale robiłem tak:
  1. // Validate that we won't over-write an existing file
  2. if (clearstatcache(file_exists('../'.$_POST['directory'].'/'.$file_name))) {
  3. HandleError("Plik o tej nazwie już istnieje.");
  4. exit(0);
  5. }
  6. //oraz na początku

I nie działa. W manualu nie widzę żadnych przykładów.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie ma prawa zadziałać:
  • clearstatcache:
    Cytat
    void clearstatcache ( void )

    - void = pustka = nie przyjmuje żadnego parametru.
  • funkcja CZYŚCI BUFOR dla operacji IO, a nie wpływa na file_exists bezpośrednio, że trzeba jej wynik przekazywać jako parametr
  • funkcje wykonają się w odwrotnej kolejności niż napisanej (najpierw file_exists, potem clearstatcache)


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
deha21
post
Post #11





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


Więc jak zrobić żeby to zadziałało?


--------------------
Go to the top of the page
+Quote Post
Retio
post
Post #12





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 3.09.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


  1. if (file_exists('../'.$_POST['directory'].'/'.$file_name)) {
  2. HandleError("Plik o tej nazwie już istnieje.");
  3. exit(0);
  4. }


Ten post edytował Retio 1.10.2009, 08:27:11


--------------------
Zaokrąglone rogi
Go to the top of the page
+Quote Post
deha21
post
Post #13





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


Niestety nic nie dało. Nie nadpisuje pliku ale nie wyświetla błędu... Możliwe, że to błąd tylko w wyświetlaniu? Reszta wyświetleń działa jak należy :/


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 22:58