Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Format zwracanego testu?
Forum PHP.pl > Forum > PHP
bwgg
  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?
Kocurro
Pokaż kod
bwgg
  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.
Kocurro
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. ?>
bwgg
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.
Kocurro
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ć.
bwgg
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!
Kocurro
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
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.