Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie pliku z nazwą o 1 cyfrę większą
Forum PHP.pl > Forum > PHP
teez
Hej,

Od 3 godzin męczę się ze skryptem, który ma polegać na wrzuceniu strony w .html, następnie zmienia nazwę na np. 1 i echo ( twoja strona domena.pl/'.$nazwa++.' ). Mam następujący skrypt :

  1. <?php
  2. $domena = "localhost";
  3. if(isset($_POST['submit'])){//jeśli zatwierdzono formularz
  4. if($_FILES['file']['error']!=0){//jeśli napotkano błąd
  5. echo 'Nastąpił błąd przy wysyłaniu pliku';
  6. }else{
  7. if(is_uploaded_file($_FILES['file']['tmp_name'])){//jeśli wysłano plik
  8. move_uploaded_file($_FILES['file']['tmp_name'],'upload/'.$_FILES['file']['name']);//przesuwamy go do odpowiedniego katalogu
  9. $dane=strip_tags(file_get_contents('upload/'.$_FILES['file']['name']));//usuwamy tagi php i html
  10. $file=fopen('upload/'.$_FILES['file']['name'],'w');//otwieramy plik
  11. fwrite($file,$dane);//zapisujemy go w zmienionej formie
  12. echo 'Plik wysłany, wpisz '.$domena.'/upload/';
  13. }else{
  14. echo 'Możliwy atak hakerski';
  15. }
  16. }
  17. }
  18.  
  19. ?>
  20.  
  21. <html xmlns="http://www.w3.org/1999/xhtml">
  22. <head>
  23. <title></title>
  24. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  25. </head>
  26. <body>
  27. <form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="post">
  28. <input type="file" name="file" />
  29. <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
  30. <input type="submit" name="submit" value="wyślij">
  31. </form>
  32. </body>
  33. </html>



Wszystko ok, lecz właśnie gdy ktoś wyśle np test.txt, a następna osoba to samo to zamiast zrobić z niej test1.txt, nadpisuje.. Nie mówcie, że nie szukałem, bo znalazlem ten temat http://forum.php.pl/index.php?showtopic=35143 lecz kod zbig13 z postu 5 nic nie daje. Zero reakcji.
daniel1302
Jest to kod poglądowy(tzn nie sprawdzony i pewnie ma błędy bo dawno nie zajmowałem się duzym projektem w php, głównie C i JS) ale na takiej zasadzie powinno działać
  1. <?php
  2. $nazwa = explode('.', $nazwa);
  3. $rozszezenie = array_pop($nazwa);
  4. $nazwa = implode('\.', $nazwa);
  5.  
  6. $katalog = '/katalog';
  7. $pliki = scandir($dir);
  8. $ilosc = 0;
  9. foreach ($pliki as $plik)
  10. {
  11. if (preg_match('/('.$nazwa.'){1}[0-9]+\.'.$rozszezenie.'/', $plik));
  12. $ilosc++;
  13. }
  14.  
  15. if ($ilosc > 0)
  16. $nowaNazwa = $nazwa.$ilosc.$rozszezenie;
  17. else
  18. $nowaNazwa = $nazwa.$rozszezenie
teez
Sprawdziłem, stronę zalewa błędami po użyciu tego kodu.
daniel1302
Przecież napisałem, że to kod poglądowy, jest to przykład przystosowany do twojego użycia, jednak nazwy zmiennych i są moje.
Kofel
Cytat(teez @ 23.12.2012, 15:35:24 ) *
Sprawdziłem, stronę zalewa błędami po użyciu tego kodu.

baaasmiley.gif baaasmiley.gif baaasmiley.gif
Jakie błędy?
teez

Notice: Undefined variable: nazwa in C:\xampp\htdocs\generatormotd\test.php on line 2

Notice: Undefined variable: dir in C:\xampp\htdocs\generatormotd\test.php on line 7

Warning: scandir() [function.scandir]: Directory name cannot be empty in C:\xampp\htdocs\generatormotd\test.php on line 7

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\generatormotd\test.php on line 9
markonix
Drugi "notice" napraw i rozwiążesz tym samym wszystkie pozostałe błędy.
No i zdefiniuj $nazwa.
matw
Ja proponuje zmienić ten fragment:
  1. if(is_uploaded_file($_FILES['file']['tmp_name'])){//jeśli wysłano plik
  2. move_uploaded_file($_FILES['file']['tmp_name'],'upload/'.$_FILES['file']['name']);//przesuwamy go do odpowiedniego katalogu
  3. $dane=strip_tags(file_get_contents('upload/'.$_FILES['file']['name']));//usuwamy tagi php i html
  4. $file=fopen('upload/'.$_FILES['file']['name'],'w');//otwieramy plik
  5. fwrite($file,$dane);//zapisujemy go w zmienionej formie
  6. echo 'Plik wysłany, wpisz '.$domena.'/upload/';
  7. }else{
  8. echo 'Możliwy atak hakerski';
  9. }


na:

  1. if(is_uploaded_file($_FILES['file']['tmp_name'])){//jeśli wysłano plik
  2. $directory = $_SERVER['DOCUMENT_ROOT'].'upload/'.$_FILES['file']['name'];
  3. $i = 0;
  4. while (!file_exists($directory)) {
  5. $i++;
  6. $directory = $_SERVER['DOCUMENT_ROOT'].'upload/'.$i.$_FILES['file']['name'];
  7. }
  8. move_uploaded_file($_FILES['file']['tmp_name'],'upload/'.$directory);//przesuwamy go do odpowiedniego katalogu
  9. $dane=strip_tags(file_get_contents($directory));//usuwamy tagi php i html
  10. $file=fopen($directory,'w');//otwieramy plik
  11. fwrite($file,$dane);//zapisujemy go w zmienionej formie
  12. echo 'Plik wysłany, wpisz '.$domena.'/upload/';
  13. }else{
  14. echo 'Możliwy atak hakerski';
  15. }


Też nie sprawdzałem czy działa tongue.gif ale założenie jest takie, żeby sprawdzał czy istnieje plik o wskazanej nazwie i jeżeli istnieje to zmienia nazwę i znowu sprawdza.
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.