Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Format zwracanego testu?, Czyli problem z shell_exec, explode i str_replace.
bwgg
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.11.2007

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


  1. <?php
  2. function pong($ip)
  3. {
  4. $result = shell_exec("ping -c 5 $ip");
  5. return $result;
  6. }
  7.  
  8. $presult = (pong("google.com");
  9. ?>


Mam ci ja taki prosty kawałek kodu. Kiedy sobie później print $presult; wychodzi mi piękny tekst *nixowego pinga. Kiedy jednak chce sobie na $presult trochę podziałać explode i str_replace - nie dzieje się nic.

Ponieważ wszystko pięknie działa, gdy do $result zamiast shell_exec(...) podstawię z palca rezultat pinga doszedłem do wniosku, że rezultat jest zwracany w postaci, której explode i str_replace nie rozumieją i dopiero print przywraca cały tekst do normalnej postaci.

Jak bardzo się mylę i czy da się mi pomóc? Jak "zrzutować" (?) tego resulta do postaci, którą będę mógł obrabiać wspomnianymi funkcjami?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Kocurro
post
Post #2





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Pokaż kod
Go to the top of the page
+Quote Post
bwgg
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.11.2007

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


  1. <?php
  2. function pong($ip)
  3. {
  4. $result = shell_exec("ping -c 5 $ip");
  5. return $result;
  6. }
  7.  
  8. $presult = pong("google.com");
  9. $ct = explode(" --- ", $presult);
  10. $ct = explode(", ", $ct[2]);
  11. $p_received = str_replace(" received", "", $ct[1]); //ammount of packages which came back
  12. $ct = explode("= ", $ct[3]);
  13. $ct = str_replace(" ms", "", $ct[1]);
  14. $timing = explode("/", $ct); //0 - shortest, 1 - average, 2 - longest, 3 - difference between 0 and 2
  15. ?>


Prosze bardzo. Przypominam, że z normalnym tekstem działa.
Go to the top of the page
+Quote Post
Kocurro
post
Post #4





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Może masz zablokowane shell_exec ?

Sprawdź to:

  1. <?php
  2. function pong($ip)
  3. {
  4. $result = shell_exec("ping -c 5 $ip");
  5. return $result;
  6. }
  7.  
  8. die( pong( 'radiomaryja.pl'));
  9. ?>
Go to the top of the page
+Quote Post
bwgg
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.11.2007

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


Cytat(Kocurro)
Może masz zablokowane shell_exec ?


Cytat(bwgg)
Mam ci ja taki prosty kawałek kodu. Kiedy sobie później print $presult; wychodzi mi piękny tekst *nixowego pinga.


Nie, nie mam. Moge sobie printnąć rezultat mojej funkcji bez problemu. Schody zaczynają się dopiero przy explodowaniu/replacowaniu - działa z czystym tekstem, nie działa z rezultatem shell_exec.

Ten post edytował bwgg 26.11.2007, 22:36:48
Go to the top of the page
+Quote Post
Kocurro
post
Post #6





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Spacje pewnie robią problemy ... rób linia po linii - tj. jeden explode, wywal go print_r'em ... dopasuj, potem drugi itp.

To jest jedyne co mogę Ci poradzić.
Go to the top of the page
+Quote Post
bwgg
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.11.2007

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


Poprawiłem na coś takiego:
  1. <?php
  2. function pong($ip)
  3. {
  4. $result = shell_exec("ping -c 5 $ip");
  5. return $result;
  6. }
  7.  
  8. $presult = pong("google.com");
  9. $ct = str_replace(" ", "", $presult);
  10. $ct = explode("---", $presult);
  11. $ct = explode(",", $ct[2]);
  12. $p_received = str_replace("received", "", $ct[1]); //ammount of packages which came back
  13. $ct = explode("=", $ct[3]);
  14. $ct = str_replace("ms", "", $ct[1]);
  15. $timing = explode("/", $ct); //0 - shortest, 1 - average, 2 - longest, 3 - difference between 0 and 2
  16. ?>


I oczywiście działa. Pytanie za 100 punktów?
Dlaczego nie "widzi" spacji kiedy są przyklejone do jakiegoś wyrażenia?

Wiadomo, to tylko workaround, przydałoby się wiedzieć co zrobić, żeby skrypt działał w poprzedniej postaci...

Dzięki!
Go to the top of the page
+Quote Post
Kocurro
post
Post #8





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Wiesz - zamiast spacji tam mogły być inne znaki przestankowe białe (tabulatory, nowa linia, znaki niepiśmienne). Dlatego, ze spacjami zawsze trzeba uważać ... smile.gif
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 Aktualny czas: 21.08.2025 - 23:08