Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Problem z file_get_content oraz fopen
marqo87
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 24.01.2008

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


Mam napisać skrypt, który po podaniu nazwy miasta łączy się z serverem Poczty Polskiej (http://www.poczta-polska.pl/kody.php) i pobiera z niej odpowiednie kody pocztowe. Zrobiłem to w taki sposób, że po podaniu nazwy miasta jest ona wklejana do odpowiedniego adresu zawierającego wyniki przeszukiwania (http://www.poczta-polska.pl/kody.php?kod=&ulica=&miejscowosc=nazwa_miasta&powiat=&wojewodztwo=dowolne&action=search gdzie nazwa_miasta zostaje zamieniona na tę podaną przez użytkownika). Dodatkowo mam jeszcze problem z funkcją ereg(). W całości wygląda to tak:

  1. <html>
  2. <head>
  3. <title>kody pocztowe</title>
  4. </head>
  5. <body>
  6. <?php
  7. if ($_GET["miasto"]){
  8. $miasto = $_GET["miasto"];
  9.  
  10. $adres = 'http://www.poczta-polska.pl/kody.php?kod=&ulica=&miejscowosc=nazwa_miasta&powiat=&wojewodztwo=dowolne&action=search';
  11.  
  12. $adres2 = str_replace("nazwa_miasta", "$miasto", "$adres");
  13.  
  14. $kod = file_get_content('$adres2');
  15. echo $kod;
  16.  
  17. //wyszukiwanie kodów pocztowych na tej stronie, powinny one być zapisane w tablicy
     $tab, ale niestety to nie działa
  18.  
  19. $ciag = '^([0-9]{2})(-[0-9]{3})? ;
  20. ereg($ciag, $kod, $tab);
  21.  
  22. $rozmiar = count($tab);
  23.  
  24. for($i = 0; $i <= $rozmiar; $i++)
  25. {
  26. echo $tab[$i].'<br />;
  27. } 
  28. }
  29. ?>
  30. <form action="kody4.php" method="get">
  31. Podaj nazwę miasta: <input type="text" name="miasto" />
  32. <input type="submit" value="szukaj" />
  33. </form>
  34. </body>
  35. </html>


Wydaje mi się, że tak to powinno wyglądać, ale coś nie działa. Wywala mi:

Fatal error: Call to undefined function: file_get_content() in c:\usr\krasnal\www\marqo\kody4.php on line 14

Widze, że chodzi o file_get_content() ale nie mam pojęcia co z tym zrobić.Napisałem alternatywny skrypt gdzie file_get_content() zamieniłem na fopen. Tym razem nie ma żadnych błędów, ale nie dostaję żadnych wyników. Druga wersja wygląda tak:

  1. <html>
  2. <head>
  3. <title>kody pocztowe</title>
  4. </head>
  5. <body>
  6. <?php
  7. if ($_GET["miasto"]){
  8. $miasto = $_GET["miasto"];
  9.  
  10. $adres = 'http://www.poczta-polska.pl/kody.php?kod=&ulica=&miejscowosc=nazwa_miasta&powiat=&wojewodztwo=dowolne&action=search';
  11.  
  12. $adres2 = str_replace("nazwa_miasta", "$miasto", "$adres");
  13.  
  14. $kod = fopen("$adres2", "r");
  15.  
  16. $ciag = '^([0-9]{2})(-[0-9]{3})? ;
  17. ereg($ciag, $kod, $tab);
  18.  
  19. $rozmiar = count($tab);
  20.  
  21. for($i = 0; $i <= $rozmiar; $i++)
  22. {
  23. echo $tab[$i].'<br />;
  24. }
  25.  
  26. fclose($kod);
  27. }
  28. ?>
  29. <form action="kody.php" method="get">
  30. Podaj nazwę miasta: <input type="text" name="miasto" />
  31. <input type="submit" value="szukaj" />
  32. </form>
  33. </body>
  34. </html>


Proszę o jakieś wskazówki, może podeszłem w zły sposób do tego problemu, może da się to zrobić w inny sposób, albo poprostu wystarczy poprawić coś w jednym z moich skryptów. Pomocy!!!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
marqo87
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 24.01.2008

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


Teraz skrypt już daje jakieś wyniki, ale to jeszcze nie to. Po wpisaniu nazwy miasta, np. Radlin dostaje coś takiego:
44-310
44
310
Wydaje mi się, że dzieje się tak z powodu warunku, który podałeś '([0-9]{2})-([0-9]{3})', dlatego ja miałem go bardziej rozbudowany: ^([0-9]{2})(-[0-9]{3})?$ gdzie znak karetki miał oznaczać, że dwie cyfry mają znaleść się na początku, trzy na końcu, a pomiędzy nimi ma być myślnik. Takie wyrażenie powoduje jednak błąd:
Warning: Invalid argument supplied for foreach() in c:\usr\krasnal\www\marqo\kody4.php on line 22 czyli w:
  1. <?php
  2. foreach($tab as $item) {
  3. ?>

Jest jeszcze jeden mankament: dla dowolnego miasta np. Radlina powinny być wyświetlone dwa kody 44-310 i 44-313, a on podaje tylko pierwszy znaleziony.

Metodą prób i błędów doszedłem do tego jak wyszukać cały kod, wystarczyło pozbyć się nawiasów z warunku. Teraz w wyniku działania skryptu dostaję cały kod pocztowy, co niezmienia faktu, że dostaję tylko pierwszy znaleziony kod. Czy jest jakiś sposób żeby ereg() przeszukał cały ciąg, a nie tylko do pierwszego pasującego fragmentu?

Teraz wygłąda to tak:

  1. <?php
  2. $ciag = '[0-9]{2}-[0-9]{3}';
  3. ereg($ciag, $kod, $tab);
  4.  
  5. foreach($tab as $item) {
  6. echo $item . &#092;"
  7. &#092;n\";
  8. }
  9. ?>


A teraz przyszedł czas na zupełnie inny wątek moich rozważań na temat mego skryptu. Pogłówkowałem troche (pare dobrych godzin (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) i rozwiązałem problem z funkcją ereg(). Teraz mój skrypt wygląda tak:
  1. <?php
  2. if ($_GET[&#092;"miasto\"]){
  3. $miasto = $_GET[&#092;"miasto\"];
  4.  
  5. $adres = 'http://www.poczta-polska.pl/kody.php?action=search&miejscowosc=nazwa_miasta&lim=50';
  6.  
  7. $adres2 = str_replace(&#092;"nazwa_miasta\", \"$miasto\", \"$adres\");
  8.  
  9. $kod = file_get_contents($adres2);
  10.  
  11. $kod2 = explode(' ', $kod);
  12.  
  13. $rozmiar = count($kod2);
  14.  
  15. $ciag = '[0-9]{2}-[0-9]{3}';
  16.  
  17. echo 'Kody pocztowe dla miasta '.$miasto.':'.'
  18.  
  19. ';
  20.  
  21. for($i = 0; $i <= $rozmiar; $i++){
  22. if (ereg($ciag, $kod2[$i])){
  23. echo &#092;"&nbsp;&nbsp;\".$kod2[$i].'
  24. ';
  25. }
  26. }
  27.  
  28. echo '
  29. ;
  30. }
  31. ?>
  32.  
  33. Podaj nazwę miasta:

Do pełni szczęścia pozostaje mi do rozwiązania tylko jeden problem jakim jest dublowanie wyników (czasami w wynikach pojawia się kilka razy ten sam kod, ale to już wina PP, a nie skryptu). Może ktoś ma jakiś pomysł jak to zrobić, a może istnieje jakaś funkcja, która sprawdza daną tablicę i usówa z niej powtarzające się wartości?
Na koniec wypada podziękować tym którzy mnie wsparli w tej ciężkiej przeprawie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował marqo87 25.01.2008, 01:00:11
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 10:11