Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PROBLEM - Jak automatycznie wyszukac nazwe pliku i dodać do zmiennej., PROBLEM - Jak automatycznie wyszukac nazwe pliku i dodać do zmiennej.
Ardo
post 27.12.2011, 15:08:22
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


Witam wszystkich,

Jestem laikiem w tych sprawach więc proszę za wyrozumiałość co do słów i pojęć.

Pytanie mam takie, Jak automatycznie z serwera wybrać nazwe, na tą chwile musze nazwe pliku skopiować i wkleić do importu, chciałbym to zmienić, by nazwa sama była dodane,

- jak widać w tych 2 plikach początek pliku jest taki sam, potem data, i następnie jeśli się nie mylę czas.

Proszę o pomoc pomysł jak to można zapisać , bym nie musiał kopiować tych nazw a automatycznie wyszukiwały się nazwy i dodawały.

Trochę ciężko mi to opisać, mam jednak nadzieje że wmiare udało mi się sens tego problemu opisać
Pliki z 1 serwisu jakie dostaje

xml@webnet.webr.pl_20111225_034706.zip
xml@webnet.webr.pl_20111224_034423.zip


pliki z 2 serwisu jakie dostaje:

ok-Trader-20111219-112717-przyrost.zip
ok-Trader-20111219-152736-przyrost.zip


czasem jest plik na serwerze taki:

ok-Trader-20111220-021612-calosc.zip

oczywiście są to 2 różne strony z których dostaje zip z XML.
Go to the top of the page
+Quote Post
mortus
post 27.12.2011, 15:29:58
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


  1. $katalog = 'dane';
  2. echo '<form action="" method="post">';
  3. foreach(glob($katalog.'/*.zip') as $sciezka) {
  4. echo '<p><input type="checkbox" name="pliki[]" value="'.$sciezka.'" /> <label>' . pathinfo($sciezka, PATHINFO_FILENAME) . '</label></p>';
  5. }
  6. echo '<p><input type="submit" value="Wyślij" /></p>';
  7. echo '</form>';

Zaznaczasz checkbox-a i w tablicy $_POST['pliki'] pod odpowiednim indeksem masz ścieżkę do pliku (jedną lub więcej, w zależności od tego ile checkbox-ów zaznaczysz).

Ten post edytował mortus 27.12.2011, 15:32:58
Go to the top of the page
+Quote Post
Ardo
post 27.12.2011, 17:43:08
Post #3





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


Dzieku oto mi chodzilo, to mam jeszcze jedno pytanie a jak zrobic z katalogami bo zplikami już wiem

Jedne pliki sa przesylane na serwer w katalogu takim samym jak ich nazwa czyli:

Katalog : xml@webnet.webr.pl_20111208_032924 / xml@webnet.webr.pl_20111208_032924.zip

Czyli głowny katalog gdzie sa te wszystkie katalogi to XML, tam są katalogi o takich samych nazwach jak pliki zip : xml@webnet.webr.pl_20111208_032924

te katalogi przesylane są na serwer, w sobie każdy katalog ma o tej samej nazwie plik zip.

Jak zrobic wyszukiwanie katalogów i w nich zipów.
Go to the top of the page
+Quote Post
mortus
post 27.12.2011, 18:49:47
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


  1. function szukajPliku($rozszerzenie, $katalog) {
  2. $pliki = array();
  3. foreach(glob($katalog) as $plik) {
  4. if($plik != '.' && $plik != '..') {
  5. if(is_dir($plik)) {
  6. szukajPliku($rozszerzenie, $plik);
  7. } else {
  8. if(pathinfo($plik, PATHINFO_EXTENSION) == $rozszerzenie)) {
  9. echo '<p><input type="checkbox" name="pliki[]" value="'.$plik.'" /> <label>' . pathinfo($plik, PATHINFO_FILENAME) . '</label></p>';
  10. }
  11. }
  12. }
  13. }
  14. return $pliki;
  15. }
  16. $katalog = 'XML';
  17. echo '<form action="" method="post">';
  18. szukajPliku('zip', $katalog);
  19. echo '<p><input type="submit" value="Wyślij" /></p>';
  20. echo '</form>';

Jak się gdzieś nie pomyliłem, to powinno działać. Przydałoby się jednak przerobić funkcję szukajPliku w taki sposób, aby zwracała tablicę ścieżek do plików .zip i podczas generowania checkbox-ów posługiwać się zwróconą tablicą.

Rozwiązania można znaleźć na tym forum.
Są to podstawy podstaw i wypadałoby wykazać się choćby odrobiną inicjatywy.

Ten post edytował mortus 27.12.2011, 18:50:24
Go to the top of the page
+Quote Post
Ardo
post 28.12.2011, 01:29:47
Post #5





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


dziekuje za pomoc, tak masz racje znalazłem i zrobiłem już to, troszkę inaczej niż ty, od innej strony, wykorzystałem GLOB_ONLYDIR, i zmodyfikowałem ten kod pierwszy twój. mniej kodu niż ta funkcja co napisałeś, i o dziwo działa smile.gif
dziękuję za pomoc,
pokazałeś mi kierunek i w tym kierunku podłubałem. Wiem że to podstawy chodź dla mnie to większe kroki bo coś nowego.
zmodyfikowałem ten kod co wcześniej napisałeś i działa, dziekuje i za pomoc, nakierowanie.

Mam jednak jeszcze jedno pytanie, teraz mi to już wyszukuje dodaje importuje, wszystko jest ok.
tylko, jak zawsze tylko coś jeszcze smile.gif chciałbym po imporcie, załadowaniu plików zip, skasować całą zawartość katalogu XML, czyli wszytkie katalogi jakie tam będą wraz z plikami zip,
Możesz mnie na kierować, pomoc jak to można zrobić. Pewnie to proste ale nie bardzo wiem jak zabrać się za to.
Go to the top of the page
+Quote Post
Ardo
post 28.12.2011, 02:07:12
Post #6





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


dziekuje za pomoc, tak masz racje znalazłem i zrobiłem już to, troszkę inaczej niż ty, od innej strony, wykorzystałem GLOB_ONLYDIR, i zmodyfikowałem ten kod pierwszy twój. mniej kodu niż ta funkcja co napisałeś, i o dziwo działa smile.gif
dziękuję za pomoc,
pokazałeś mi kierunek i w tym kierunku podłubałem. Wiem że to podstawy chodź dla mnie to większe kroki bo coś nowego.
zmodyfikowałem ten kod co wcześniej napisałeś i działa, dziekuje i za pomoc, nakierowanie.

Mam jednak jeszcze jedno pytanie, teraz mi to już wyszukuje dodaje importuje, wszystko jest ok.
tylko, jak zawsze tylko coś jeszcze smile.gif chciałbym po imporcie, załadowaniu plików zip, skasować całą zawartość katalogu XML, czyli wszytkie katalogi jakie tam będą wraz z plikami zip,
Możesz mnie na kierować, pomoc jak to można zrobić. Pewnie to proste ale nie bardzo wiem jak zabrać się za to.


dziekuje za pomoc, tak masz racje znalazłem i zrobiłem już to, troszkę inaczej niż ty, od innej strony, wykorzystałem GLOB_ONLYDIR, i zmodyfikowałem ten kod pierwszy twój. mniej kodu niż ta funkcja co napisałeś, i o dziwo działa smile.gif
dziękuję za pomoc,
pokazałeś mi kierunek i w tym kierunku podłubałem. Wiem że to podstawy chodź dla mnie to większe kroki bo coś nowego.
zmodyfikowałem ten kod co wcześniej napisałeś i działa, dziekuje i za pomoc, nakierowanie.

Mam jednak jeszcze jedno pytanie, teraz mi to już wyszukuje dodaje importuje, wszystko jest ok.
tylko, jak zawsze tylko coś jeszcze smile.gif chciałbym po imporcie, załadowaniu plików zip, skasować całą zawartość katalogu XML, czyli wszytkie katalogi jakie tam będą wraz z plikami zip,
Możesz mnie na kierować, pomoc jak to można zrobić. Pewnie to proste ale nie bardzo wiem jak zabrać się za to.


w tym kodzie funkcji co napisałeś ostatnio jest cos nie tak wyskakuje blad 503, no i tez jak zerkam na niego, to czy funkcja szukajPliku() ta sama może byc wewnątrz tej samej funkcji szukajPliku()?


  1.  
  2. function [b]szukajPliku[/b]($rozszerzenie, $katalog)
  3. {
  4. $pliki = array();
  5. foreach(glob($katalog) as $plik)
  6. {
  7. if($plik != '.' && $plik != '..')
  8. {
  9. if(is_dir($plik))
  10. {
  11. [b]szukajPliku[/b]($rozszerzenie, $plik); // <-- tu taj, czy tak moze byc?
  12. } else
  13. {
  14. if(pathinfo($plik, PATHINFO_EXTENSION) == $rozszerzenie)
  15. {
  16. echo '<p><input type="checkbox" name="pliki[]" value="'.$plik.'" /> <label>' . pathinfo($plik, PATHINFO_FILENAME) . '</label></p>';
  17. }
  18. }
  19. }
  20. }
  21. return $pliki;
  22. }
  23.  
  24. $katalog = '../xml/';
  25. echo '<form action="" method="post" enctype="multipart/form-data">';
  26. szukajPliku('zip', $katalog);
  27. echo '<p><input type="submit" value="Wy&para;lij" /></p>';
  28. echo '</form>';
  29.  


Pogrubiłem tek kawałek,

Go to the top of the page
+Quote Post
darko
post 28.12.2011, 02:19:17
Post #7





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Może coś takiego?

  1. $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
  2. foreach ($iterator as $path) {
  3. if (!$path->isDir()) {
  4. $ext = pathinfo($path->__toString());
  5. if($ext['extension'] == 'zip') {
  6. $parts = explode('-', $path->__toString());
  7. if(strstr('-', $path->__toString())) {
  8. $date = $parts[2];
  9. $time = $parts[3];
  10. $result[$date] = $path->__toString();
  11. } else {
  12. $date = $parts[1];
  13. $time = $parts[2];
  14. $result[$date] = $path->__toString();
  15. }
  16. }
  17. }
  18. }
  19. var_dump(ksort($result));


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
mortus
post 28.12.2011, 09:13:23
Post #8





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Naprawdę wystarczy poszukać - funkcja search_dir() w tym oznaczonym poście to taka sama funkcja jak szukajPliku() z odwróconą kolejnością parametrów. Sposób użycia:
  1. $katalog = '../xml';
  2. $zipy = search_dir($katalog, 'zip');
  3. echo '<form action="" method="post" enctype="multipart/form-data">';
  4. foreach($zipy as $zip) {
  5. echo '<p><input type="checkbox" name="pliki[]" value="'.$zip.'" /> <label>' . pathinfo($zip, PATHINFO_FILENAME) . '</label></p>';
  6. }
  7. echo '<p><input type="submit" value="Wyślij" /></p>';
  8. echo '</form>';


Jeśli chodzi o wywołanie funkcji w funkcji to jest to jak najbardziej dozwolone i nie jest niczym szczególnym, tylko najzwyklejszą rekurencją.

Jeśli chodzi o usuwanie plików, to pomóc może rmdir() (przyjrzyj się przykładom).
Go to the top of the page
+Quote Post
Ardo
post 29.12.2011, 13:28:29
Post #9





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


dzieki za wskazanie kierunku dam znac jak poszlo

mam takie pytanie co może byc powodem że przy tej funkcji is_dir() wyskakuje blad 503 Service Unavailable

--> if(is_dir($plik)) {}

PHP nie obsluguje tego ?

jesli chodzi o kasowanie plików i katalogów dzieki za pokieorwanie przeczytałem zobaczyłem przykład i cos podobnego zrobiłem, działa.

Dlaczego funkcja is_dir() nie działa u mnie wyskakuje informacja 503 Service Unavailable , możesz poradzić co może być przyczyna. wiem ze to ta funkcja bo jak ja zablokuje to jest ok strona sie wyswietla a jak odblokuje to wyskoczy blad 503

prosze o jakąś wskazówke co moze byc przyczyna, czy PHP tej funkcji nie ma?

dzieki za wskazówki mam tez pytanie może wiesz czemu u mnie funkcja is_dir () nie dziala, jak tylko odblokuja ja to wyskakuje mi blad :503 Service Unavailable, co moze być nie tak?
Go to the top of the page
+Quote Post
mortus
post 29.12.2011, 13:59:30
Post #10





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Może funkcja is_dir() dostaje nieprawidłowy parametr tzn. adres url, zamiast ścieżki bezwzględnej. O ewentualne braki w PHP i błędy 503 pytaj dostawcę hostingu.
Go to the top of the page
+Quote Post
Ardo
post 29.12.2011, 14:55:31
Post #11





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


nie dostaje adres url a katalog tylko, ale oglnie nawet wywolanie funkcji test

  1. $dir='../xml/';
  2. $directory=opendir($dir);
  3. while($plik=readdir($directory)){
  4. if(is_dir($dir.'/'.$plik)){
  5. echo("Katalog : $plik<br />");
  6. }else{
  7. echo("Plik : $plik<br />");
  8. }
  9. }


nic nie daje, próbowałem ze sciezka bo tez tak myslalem, nie ma bledów kodu, tylko pisze 503, jak zablokuje is_dir() to jest ok tak jakby ta funkcja nie działała. napisalem do hostingu tylko kiedy mi odpowiedza tu niestety problem. ale dzieki za informacja gdzie moze byc problem
Go to the top of the page
+Quote Post
mortus
post 29.12.2011, 15:20:30
Post #12





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


A to jest cały kod, czy tylko fragment? Jeśli jest to fragment funkcji rekurencyjnej, wywoływanej dla katalogu, to nie ma się co dziwić, że coś nie działa. Funkcja readdir() zwraca m. in. nazwę katalogu bieżącego (czyli .) jak i nadrzędnego (czyli ..). Jeśli ich nie pominiesz, to funkcja będzie próbowała przeszukać cały system plików, do tego raczej nie masz uprawnień.

Ten post edytował mortus 29.12.2011, 15:27:55
Go to the top of the page
+Quote Post
Ardo
post 29.12.2011, 16:35:51
Post #13





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


Rozumie nie doczytałem o funkcji readdir(),
mam inne pytanie dostaje taka informacje jak wykorzystuje funkcje search_dir(),
Fatal error: Call to undefined function search_dir()

jesli chodzi o ten błąd 503 to chyba cos nie tak jest bo tak samo dzieje sie jak wykorzystam ten kod co napisałeś jeden czy drugi, wiec tu coś musi być nie tak z tym is_dir() wiec moze jednak PHP nie ma tej funkcji włączonej

  1. $katalog = '../xml/';
  2.  
  3.  
  4. function szukajPliku($rozszerzenie, $katalog)
  5. {
  6. $pliki = array();
  7. foreach(glob($katalog) as $plik)
  8. {
  9. if($plik != '.' && $plik != '..')
  10. {
  11. if(is_dir($plik)) // czy plik jest katalogiem
  12. {
  13. szukajPliku($rozszerzenie, $plik);
  14. } else
  15. {
  16. if(pathinfo($plik, PATHINFO_EXTENSION) == $rozszerzenie)
  17. {
  18. echo '<p><input type="checkbox" name="pliki[]" value="'.$plik.'" /> <label>' . pathinfo($plik, PATHINFO_FILENAME) . '</label></p>';
  19. }
  20. }
  21. }
  22. }
  23. return $pliki;
  24. }
  25.  
  26.  
  27. echo '<form action="" method="post">';
  28. szukajPliku('zip', $katalog);
  29. echo '<p><input type="submit" value="Wyślij" /></p>';
  30. echo '</form>';
  31.  
Go to the top of the page
+Quote Post
mortus
post 29.12.2011, 16:47:29
Post #14





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Ale to możesz sobie sprawdzić na wiele sposobów:
  1. // 1.
  2. // 2.
  3. var_dump(function_exists('is_dir'));

Nie pokazałeś nam w ogóle całego kodu, a wróżyć nikt z nas nie potrafi. Skąd mamy wiedzieć, w którym miejscu tkwi problem, skoro nawet nie wiemy, z którego rozwiązania w tej chwili korzystasz.
Go to the top of the page
+Quote Post
Ardo
post 29.12.2011, 17:28:42
Post #15





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


masz racje podsyłam dwa kody które sprawdzałem niestety przy kazdym jest blad 503

1 kod:
  1. function szukajPliku($rozszerzenie, $katalog)
  2. {
  3. $pliki = array();
  4. foreach(glob($katalog) as $plik)
  5. {
  6. if($plik != '.' && $plik != '..')
  7. {
  8. if(is_dir($plik)) // czy plik jest katalogiem
  9. {
  10. szukajPliku($rozszerzenie, $plik);
  11. } else
  12. {
  13. if(pathinfo($plik, PATHINFO_EXTENSION) == $rozszerzenie)
  14. {
  15. echo '<p><input type="checkbox" name="pliki[]" value="'.$plik.'" /> <label>' . pathinfo($plik, PATHINFO_FILENAME) . '</label></p>';
  16. }
  17. }
  18. }
  19. }
  20. return $pliki;
  21. }
  22.  
  23. $katalog = '../xml';
  24.  
  25. echo '<form action="" method="post">';
  26. szukajPliku('zip', $katalog);
  27. echo '<p><input type="submit" value="Wyślij" /></p>';
  28. echo '</form>';
  29.  





2 kod:
  1. $katalog = '../xml';
  2.  
  3. echo '<form action="" method="post">';
  4. szukajPliku('zip', $katalog);
  5. echo '<p><input type="submit" value="Wyślij" /></p>';
  6. echo '</form>';
  7.  
  8. ////////////////////////
  9.  
  10.  
  11. function szukajPliku($rozszerzenie, $katalog)
  12. {
  13. $pliki = array();
  14. foreach(glob($katalog) as $plik)
  15. {
  16. if($plik != '.' && $plik != '..')
  17. {
  18. if(is_dir($plik)) // czy plik jest katalogiem
  19. {
  20. szukajPliku($rozszerzenie, $plik);
  21. } else
  22. {
  23. if(pathinfo($plik, PATHINFO_EXTENSION) == $rozszerzenie)
  24. {
  25. echo '<p><input type="checkbox" name="pliki[]" value="'.$plik.'" /> <label>' . pathinfo($plik, PATHINFO_FILENAME) . '</label></p>';
  26. }
  27. }
  28.  
  29. }
  30. }
  31. return $pliki;
  32. }



to caly kod pliku.

juz troche wiecej wiem funkcja is_dir () działa

napisałem cos takiego:

  1. if ($handle = opendir("$katalog")) {
  2.  
  3. while (false !== ($file = readdir($handle) ) ) {
  4.  
  5. if (is_file($katalog.'/'.$file)) echo "PLIK ";
  6. if (is_dir($katalog.'/'.$file)) echo "KATALOG ";
  7. echo "$file";
  8. echo "<br />";
  9.  
  10. if (is_file($file)==FALSE && $file != "." && $file != ".."){
  11. $tablica["$file"]=NULL; // tworzymy tablice o wpisach = nazwa katalogu i wartości zero
  12. }
  13. }
  14. } else {
  15. echo "Brak dostępu do katalogu \"$katalog\"";
  16. }
  17.  
  18. closedir($handle);


i smiga przy twoim kodzie jest problem z funkcja szukajPliku() i tu jest problem przy tej funkcji to sie dzieje. czemu to nie wiem, nie wiem co jest przyczybną
tu ten kod:
  1. $katalog = '../xml';
  2.  
  3. function szukajPliku($rozszerzenie, $katalog)
  4. {
  5. $pliki = array();
  6.  
  7. foreach(glob($katalog) as $plik)
  8. {
  9. if($plik != '.' && $plik != '..')
  10. {
  11. if(is_dir($plik)) // czy plik jest katalogiem
  12. {
  13. szukajPliku($rozszerzenie, $plik); // < ---- w tym miejsu tak co laik wywnioskowal :) ale czemu dalej nie wiem.
  14. } else
  15. {
  16. if(pathinfo($plik, PATHINFO_EXTENSION) == $rozszerzenie)
  17. {
  18. echo '<p><input type="checkbox" name="pliki[]" value="'.$plik.'" /> <label>' . pathinfo($plik, PATHINFO_FILENAME) . '</label></p>';
  19. }
  20. }
  21. }
  22. }
  23. return $pliki;
  24. }
  25.  
  26.  
  27.  
  28. echo '<form action="" method="post">';
  29. szukajPliku('zip', $katalog);
  30. echo '<p><input type="submit" value="Wyślij" /></p>';
  31. echo '</form>';
  32.  
Go to the top of the page
+Quote Post
mortus
post 29.12.2011, 17:46:18
Post #16





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Bo trzeba zmienić linię 7 na:
  1. foreach(glob($katalog .'/*') as $plik) {

Tak to już jest, jak się z głowy pisze.

Ten post edytował mortus 29.12.2011, 17:46:57
Go to the top of the page
+Quote Post
Ardo
post 2.01.2012, 20:35:40
Post #17





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


dzieki o to chodzilo juz wszytko gra, pieknie dziala.
Jeszcze raz wielkie dzieki za wiedze i pomoc


Mam prośbę zerknij na to proszę może mi coś podpowiesz:
Temat: Problem z petla and8211; XML co jest powodem ze tylko jedno ogloszenie wyciaga

mam nadzieje ze link widać, będę wdzięczny za wskazówkę

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 Wersja Lo-Fi Aktualny czas: 25.04.2024 - 03:06