Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] formatowanie odpowiedzi funkcji exec()
Sebaa
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.08.2009

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


Witam
Mam na stronie następujący skrypt wypisujący na ekranie kilka linijek odpowiedzi dowolnej komendy powłoki Linux.
exec("polecenie",$wyj);
for ($i=0; $i < count($wyj); $i++) {print($wyj[$i]."\n");};
Zakładając, że odpowiedź ma 5 linijek. Czy mógłbym jakoś nie wyświetlać na przykład 4tej linijki?.
Proszę o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Void
post
Post #2





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

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


  1. exec("polecenie",$wyj);
  2.  
  3. for ($i=0; $i < count($wyj); $i++) {
  4. if ($i != 3) {
  5. print($wyj[$i]."\n");
  6. }
  7. }

? smile.gif
Go to the top of the page
+Quote Post
Sebaa
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.08.2009

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


ehhh .. rzeczywiście proste smile.gif
Dziękuję. smile.gif
Go to the top of the page
+Quote Post
CyberDuck_
post
Post #4





Grupa: Zarejestrowani
Postów: 135
Pomógł: 15
Dołączył: 17.08.2009

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


Robicie jeden podstawowy blad i jeszcze tego nie zauwazacie na stronie.

Przypuscmy, ze masz te swoja tablice zbudowana tak :
  1. $wyj[0] = 'tekst 1';
  2. $wyj[1] = 'tekst 2';
  3. $wyj[2] = 'tekst 3';
  4. $wyj[3] = 'tekst 4';
  5. $wyj[4] = 'tekst 5';

Czyli masz 5 komorek w tabeli tak ?
Teraz robiac tak :
  1. for ($i=0; $i < count($wyj); $i++) {

kazesz skryptowi wyswietlic tak na prawde 6 komorek bo count zwraca Ci
liczbe 5, a Ty robisz petle od 0 wiec wyswietlasz komorki 0, 1, 2, 3, 4, 5 .
Liczac od poczatku wychodzi 6 komorek.
Nie lepiej zrobic tak ? :
  1. for ($i=0; $i < (count($wyj) - 1); $i++) {
Go to the top of the page
+Quote Post
Fifi209
post
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Robiąc tak jak mówisz, ominiesz ostatni element tablicy.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Void
post
Post #6





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

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


Cytat(CyberDuck_ @ 22.09.2009, 01:54:34 ) *
Robicie jeden podstawowy blad i jeszcze tego nie zauwazacie na stronie.

Lepiej pomyśl chwilę kolego zanim wytkniesz komuś błąd smile.gif

count zwraca całkowitą liczbę elementów w tablicy, a nie ostatni index, więc dla takiej tablicy jaką podałeś:
  1. $wyj[0] = 'tekst 1';
  2. $wyj[1] = 'tekst 2';
  3. $wyj[2] = 'tekst 3';
  4. $wyj[3] = 'tekst 4';
  5. $wyj[4] = 'tekst 5';

count($wyj) będzie równe 5.

W warunku sprawdzamy, licząc od 0, czy $i jest mniejsze od count($wyj) (mniejsze, nie mniejsze lub równe). Więc wszystko będzie w porządku, warunek będzie spełniony dla 0, 1, 2, 3, 4 (dla 5 już nie bo 5 nie jest mniejsze od 5).

Cytat(CyberDuck_ @ 22.09.2009, 01:54:34 ) *
Nie lepiej zrobic tak ? :
  1. for ($i=0; $i < (count($wyj) - 1); $i++) {

Nie, nie lepiej bo wtedy nie wypiszesz ostatniego elementu tablicy.
count($wyj) - 1 = 4, warunek jest spełniony dla 0, 1, 2, 3 (a gdzie czwarty element tablicy?).
Jeżeli już to musiał byś dać tak:
  1. for ($i=0; $i <= (count($wyj) - 1); $i++) {
Go to the top of the page
+Quote Post
Fifi209
post
Post #7





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


~Void
A jak tym drugim sposobem z odejmowaniem od count wytniesz coś ze środka?

W ogóle nie prościej wywalić ten element?
unset + przelecieć foreach


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Void
post
Post #8





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

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


Cytat(fifi209 @ 22.09.2009, 08:01:39 ) *
~Void
A jak tym drugim sposobem z odejmowaniem od count wytniesz coś ze środka?

Tak jak tamtym, tylko trzeba by dodać w ifie 1 do indeksu tablicy tongue.gif Ale wiem, to bez sensu, zresztą teraz nie myślałem akurat o problemie z tematu tylko chciałem wyjasnić ~CyberDuck_ kiedy może użyć tej swojej metody smile.gif
Go to the top of the page
+Quote Post
CyberDuck_
post
Post #9





Grupa: Zarejestrowani
Postów: 135
Pomógł: 15
Dołączył: 17.08.2009

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


fifi ja nie pisalem o metodzie. Tylko przesledzcie to co napisalem.
Metode juz ktos tutaj podal. Zreszta jak juz wspomnial moj poprzednik
tez blednie bo trzeba od oidjac tez jeden. Indexowanie tablicy zaczyna
sie od zeraPomysl z forech chyba jest nawet lepszy.
Podalem konkretny przyklad i zaden element nie zostanie
pominiety jak ktos tu zauwazyl . Przesledz kolego dokladnie
dzialanie i zobaczysz, ze wszystkie elementy zostana wziete pod
uwage, jesli oczywiscie jak bozia przykazala bedziesz zapisywac
elementy w tablicy od indexu=0 w zwyz.

Zreszta na zdrowy rozum i logicznie rozumujac.
Powtorze sie, ale co mi tam ...
0 - element 1
1 - element 2
2 - element 3

teraz wykonujesz count i dostajesz wynik 3
wykonujac petle :
  1. for ($licznik = 0; $licznik <= count($tablica); $licznik++) {

wykonujesz ja 4 razy exclamation.gif bo zaczynasz od zera i konczysz na 4 ...
Czyli 0, 1, 2, 3 ... Tu sa 4 elementy a w tablicy zapamietales 3 wiec
o jeden wyswietlasz wiecej ... Stad to moje
  1. (count($tablica) - 1);

Najlepiej to jest przesledzic na przykladzie najprostszym jaki moze byc
wiec dla leniwych prosze bardzo do skopiowania i wklejenia do edytorka:
  1. <?php
  2. $tab[0] = '1';
  3. $tab[1] = '2';
  4. $tab[2] = '3';
  5. $tab[3] = '4';
  6. $tab[4] = '5';
  7. for ($licznik = 0; $licznik <= (count($tab) -1); $licznik++) {
  8. echo $licznik .":" .$tab[$licznik] ."<br>";
  9. }
  10. ?>

Wynik :
  1. 0:1
  2. 1:2
  3. 2:3
  4. 3:4
  5. 4:5

I jest wyswietlana prawidlowa ilosc elementow, a jakby nie bylo -1 ?
  1. <?php
  2. $tab[0] = '1';
  3. $tab[1] = '2';
  4. $tab[2] = '3';
  5. $tab[3] = '4';
  6. $tab[4] = '5';
  7. for ($licznik = 0; $licznik <= count($tab); $licznik++) {
  8. echo $licznik .":" .$tab[$licznik] ."<br>";
  9. }
  10. ?>

wynik :
  1. 0:1
  2. 1:2
  3. 2:3
  4. 3:4
  5. 4:5
  6. 5:

Dlaczego pisze jak bozia przykazala ?
Wystarczy usunac index z tablicy ...
  1. $tab[] = '1';
  2. $tab[] = '2';
  3. $tab[] = '3';
  4. $tab[] = '4';
  5. $tab[] = '5';

Efekt za kazdym razem bedzie taki sam.
Powodzonka.

Ten post edytował CyberDuck_ 22.09.2009, 08:38:11
Go to the top of the page
+Quote Post
Void
post
Post #10





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

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


Cytat(CyberDuck_ @ 22.09.2009, 09:35:33 ) *
Zreszta na zdrowy rozum i logicznie rozumujac.
Powtorze sie, ale co mi tam ...
0 - element 1
1 - element 2
2 - element 3

teraz wykonujesz count i dostajesz wynik 3
wykonujac petle :
  1. for ($licznik = 0; $licznik <= count($tablica); $licznik++) {

wykonujesz ja 4 razy exclamation.gif bo zaczynasz od zera i konczysz na 4 ...
Czyli 0, 1, 2, 3 ... Tu sa 4 elementy a w tablicy zapamietales 3 wiec
o jeden wyswietlasz wiecej ... Stad to moje
  1. (count($tablica) - 1);

Najlepiej to jest


No tak, tu masz rację, tylko wróć do swojego poprzedniego posta i sprawdź czy na pewno tak samo napisałeś tongue.gif

Cytat(CyberDuck_ @ 22.09.2009, 01:54:34 ) *
Nie lepiej zrobic tak ? :
  1. for ($i=0; $i < (count($wyj) - 1); $i++) {


Odjąłeś 1 od wartości count(), ale przy tym użyłeś w warunku znaku < a nie <=.
W tym przypadku mając 4-elementową tablicę byłoby tak:
indeksy tablicy: 0, 1, 2, 3
count(tablica) = 4
count(tablica)-1 = 3
warunek: $i < (count(tablica) - 1) spełniony dla indeksów mniejszych od 3, czyli tylko dla elementów o indeksach 0, 1, 2. A gdzie indeks 3? smile.gif

Żeby warunek był spełniony dla wszystkich elementów trzeba postawić ten znak <= lub zostawić znak <, ale wtedy nie odejmować jedynki (wyjdzie na to samo).

Ten post edytował Void 22.09.2009, 15:28:48
Go to the top of the page
+Quote Post
CyberDuck_
post
Post #11





Grupa: Zarejestrowani
Postów: 135
Pomógł: 15
Dołączył: 17.08.2009

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


Racja ...
Przepraszam. Zwykla pomylka, ale dobre, ze wiadomo
o co juz chodzi.
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: 19.08.2025 - 18:47