Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] Upload plików
Forum PHP.pl > Forum > XML, AJAX > AJAX
martinii007
Hej

Jestem tu nowy smile.gif Mam nadzieję, ze ktoś zarzuci dobrą radą smile.gif
Przechodząc do sedna, mam napisany upload plików w AJAXIE, aktualnie przerabiam go w następujący sposób:

1. Pierwsza przeróbka dotyczyła zmiany nazw plików które user wczytuje na serwer na jego imię i nazwisko tj. jeżeli user wgra plik 1s2ff2.pdf to jego nazwa zostanie zmieniona na jego imię i nazwisko czyli imienazwiskousera.pdf.

To udało mi się zrobić dyrektywą:
  1. $file_strip = str_replace("{$filename}","{$id}{$ext}",$filename);


2. Nie chcę, aby w pliku uploads był totalny miszmasz dlatego chcę stworzyć folder do którego będę ładować poszczególne pliki usera (folder ma również zawierać jego imię i nazwisko). Konkretnie chodzi o to, że jeżeli na stronie rejestruje się Jan Kowalski to zostaje z automatu stworzony taki folder i wszystkie pliki o takiej nazwie są tam ładowane.

  1. <?php
  2.  
  3. $id = "Marcin"; // przykładowy string, docelowo będzie tu Imie i nazwisko usera
  4. mkdir("uploads/{$id}/",0777, true);
  5. $max_filesize = 2097152; // Maximum filesize in BYTES.
  6. $allowed_filetypes = array('.jpg','.jpeg','.gif','.zip'); // These will be the types of file that will pass the validation.
  7. $filename = $_FILES['userfile']['name']; // Get the name of the file (including file extension).
  8. $ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // Get the extension from the filename.
  9. $file_strip = str_replace("{$filename}","{$id}{$ext}",$filename);
  10.  
  11. $upload_path = 'uploads/'; //Set upload path
  12.  
  13.  
  14. // Check if the filetype is allowed, if not DIE and inform the user.
  15. if(!in_array($ext,$allowed_filetypes)) {
  16. die('<div class="error">The file you attempted to upload is not allowed.</div>');
  17. }
  18. // Now check the filesize, if it is too large then DIE and inform the user.
  19. if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize) {
  20. die('<div class="error">The file you attempted to upload is too large.</div>');
  21. }
  22. // Check if we can upload to the specified path, if not DIE and inform the user.
  23. if(!is_writable($upload_path)) {
  24. die('<div class="error">You cannot upload to the /uploads/ folder. The permissions must be changed.</div>');
  25. }
  26. // Move the file if eveything checks out.
  27. if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $file_strip)) {
  28. echo '<div class="success">'. $file_strip .' uploaded successfully</div>'; // It worked.
  29. } else {
  30. echo '<div class="error">'. $file_strip .' was not uploaded. Please try again.</div>'; // It failed :(.
  31. }
  32. ?>


Chciałem to zrobić w następujący sposób:

  1. $a = mkdir("uploads/{$id}/",0777, true);
  2. $upload_path = 'uploads/{$a}/'; //Set upload path
  3. chmod('uploads/{$a}/', 0777);


Nie da się ponieważ wyrzuca błąd: You cannot upload to the /uploads/ folder. The permissions must be changed
Próbowałem zmieniać chomda na różne sposoby, ale żadnego efektu. Później zauważyłem, że nie jest możliwe przypisanie mkdira do określonej zmiennej bo on się wykona nawet jak nie wykorzystam tej zmiennej w programie...

Ma ktoś jakieś rozwiązanie ?
Sephirus
Dałeś "ręcznie" katalogowi "uploads" uprawnienia 777?
martinii007
Do folderu upload normalnie pliki uploaduje natomiast do tego stworzonego z automatu nie, więc nie wiem czemu nie działa. Jak przypisze source=upload to normalnie zaplouduje w innym przypadku nie. W załączniku przesyłam całą paczkę więc możesz potestować u siebie. Dzięki za szybką odpowiedź smile.gif
AJAX
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.