Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PROBLEM - Jak automatycznie wyszukac nazwe pliku i dodać do zmiennej.
Forum PHP.pl > Forum > XML, AJAX > XML
Ardo
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.
mortus
  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).
Ardo
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.
mortus
  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.
Ardo
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.
Ardo
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,

darko
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));
mortus
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).
Ardo
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?
mortus
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.
Ardo
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
mortus
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ń.
Ardo
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.  
mortus
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.
Ardo
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.  
mortus
Bo trzeba zmienić linię 7 na:
  1. foreach(glob($katalog .'/*') as $plik) {

Tak to już jest, jak się z głowy pisze.
Ardo
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ę

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-2024 Invision Power Services, Inc.