Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> "exec" i "foreach"
morrison
post 4.06.2005, 13:29:44
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


mam taki kod:

  1. <?php
  2.  
  3. exec($command_1,$output1);
  4. print &#092;"Wynik wykonania operacji: <br />\";
  5.  
  6. foreach ($output1 as $line) {
  7.  echo &#092;"$line <br />n\";
  8. }
  9.  
  10.  
  11. ?>


ale niestety jesli polecenie systemowe nie wykona sie poprawnie, na ekran nie zostaje wypisany error. Jak to zmodyfikowac aby zobaczyc komunikat o bledzie?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
hombrerro
post 4.06.2005, 13:37:38
Post #2





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 31.07.2003
Skąd: Warszawa

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


Powinieneś użyć funkcji passthru która zwraca cały output z wykonanego polecenia systemowego a nie tylko ostatnią linie.
Go to the top of the page
+Quote Post
morrison
post 4.06.2005, 13:52:47
Post #3





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


zrobilem tak:
  1. <?php
  2.  
  3. passthru($command_1,$output1);
  4. print &#092;"Wynik wykonania operacji: $output1<br />\";
  5.  
  6. foreach ($output1 as $line) {
  7.  echo &#092;"$line <br />n\";
  8. } 
  9.  
  10. ?>

i jest blad w lini z foreach ze zly argument. Natomiast w $output1 zwraca "0" gdy polecenie sie wykona poprawnie a gdy nie to np zwraca "4". Nie zwraca mi calego komunikatu bledu sad.gif


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 4.06.2005, 14:07:43
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Manual
Cytat
If the return_var argument is present, the return status of the Unix command will be placed here


Czyli dziala tak jak ma dzialac: zwraca ci 0, 4 itd., co nie jest tablica (foreach())

Passthru nie zwraca zadnego komunikatu od polecenia -- on go wypisuje, jak chcesz go wrzucic do zmiennej to uzyj tego skryptu (z manuala):
  1. <?php
  2. passthru(&#092;"<i>command</i>\");
  3. $var = ob_get_contents();
  4. ob_end_clean(); //Use this instead of ob_flush()
  5. ?>


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
hombrerro
post 4.06.2005, 14:10:12
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 31.07.2003
Skąd: Warszawa

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


Ach...

Jeżeli podasz nazwę zmiennej w passthru to output zapisany w tejże zmiennej nie będzie tablicą tylko po prostu outputem z polecenia.

Nie będziesz mógł zatem użyć foreach, tylko jakoś przeparsować wynik polecenia.

Zaraz postaram się to sprawdzić o ile uda mi się włączyć 2 komp.


Passthru zwraca bezpośrednio output - zapomniało mi się - ale w ten sposób jaki przedstawił dr bonzo masz sobie cały output w jednej zmiennej i możesz z tym zrobić niemalże prawie wszystko winksmiley.jpg

Ten post edytował hombrerro 4.06.2005, 14:24:02
Go to the top of the page
+Quote Post
morrison
post 4.06.2005, 14:44:14
Post #6





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


dzieki za podpowiedzi, ale jak na razie nie udalo mi sie uzyskac wyswietlenia bledu na ekranie przegladarki. Podpowiedzcie jesli wiecie, skoro passthru zwraca int, czyli 0, 4 itd to rozumiem ze zwrocone 0 oznacza wykonanie sie komendy unixowej ,natomiast kazda inna cyfra oznacza nie wykonanie sie jej? Czy tez nie do konca tak jest?


--------------------
Go to the top of the page
+Quote Post
hombrerro
post 4.06.2005, 15:33:26
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 31.07.2003
Skąd: Warszawa

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


Sprawdz manual php online w komentarzach masz cos takiego np:

The documention does not mention that passthru() will only display standard output and not standard error.

If you are running a script you can pipe the STDERR to STDOUT by doing

exec 2>&1

Eg. the script below will actually print something with the passthru() function...

#!/bin/sh
exec 2>&1
ulimit -t 60
cat nosuchfile.txt
Go to the top of the page
+Quote Post
hwao
post 4.06.2005, 17:35:05
Post #8


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




a nie mozna tak?smile.gif
  1. <?php
  2. echo `$command_1`;
  3. ?>
Go to the top of the page
+Quote Post
morrison
post 5.06.2005, 13:36:57
Post #9





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


Cytat(hwao @ 2005-06-04 18:35:05)
a nie mozna tak?smile.gif
  1. <?php
  2. echo `$command_1`;
  3. ?>

nie, tak nie działa. Wydawać by się mogło, że to proste, wyświetlić komunikat błędu w przeglądarce. sad.gif
dotychczas mam taki kod:
  1. <?php
  2.  
  3. $command_3 = 'java -classpath '.$prefix_1.'/gnujaxp.jar:'.$prefix_1.'/xt.jar -Dcom.jclark.xsl.sax.parser=gnu.xml.aelfred2.SAXDriver com.jclark.xsl.sax.Driver '.$prefix_2.'/publ.xml '.$prefix_1.'/bibteXML2bibtex.xsl '.$prefix_2.'/'.$_SESSION['fileYearConvert'].'.bib';
  4.  
  5. passthru($command_3,$output_3);
  6. if ($output_3 == 0) {
  7. print '<br />Polecenie java wykonane poprawnie. Plik publ.xml zostal skonwertowany do pli
  8. u '.$_SESSION['fileYearConvert'].'.bib<br /><br />';
  9. } else {
  10. print '<br /><font color=#ff0000>Wystapil blad!. Polecenie java nie zostalo wykonane. Skontaktuj sie z admini
  11. tratorem systemu.</font><br /><br />';
  12. }
  13.  
  14.  
  15. ?>

Czy potrafi ktoś go zmodyfikować tak bym otrzymał treść błędu??


--------------------
Go to the top of the page
+Quote Post
ActivePlayer
post 5.06.2005, 20:10:52
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


  1. <?php
  2.  
  3. $command_3 = 'java -classpath '.$prefix_1.'/gnujaxp.jar:'.$prefix_1.'/xt.jar -Dcom.jclark.xsl.sax.parser=gnu.xml.aelfred2.SAXDriver com.jclark.xsl.sax.Driver '.$prefix_2.'/publ.xml '.$prefix_1.'/bibteXML2bibtex.xsl '.$prefix_2.'/'.$_SESSION['fileYearConvert'].'.bib';
  4.  
  5. passthru($command_3,$output_3);
  6. $var = ob_get_contents();
  7. if ($output_3 == 0) {
  8. print '<br />Polecenie java wykonane poprawnie. Plik publ.xml zostal skonwertowany do pli
  9. u '.$_SESSION['fileYearConvert'].'.bib<br /><br />';
  10. } else {
  11. print '<br /><font color=#ff0000>Wystapil blad!. Polecenie java nie zostalo wykonane. Skontaktuj sie z admini
  12. tratorem systemu.</font><br /><br />';
  13. print_r($var);
  14. }
  15. ?>

moze tak ? no bo w sumie:
Execute an external program and display raw output.
Go to the top of the page
+Quote Post
Cysiaczek
post 1.06.2007, 17:21:12
Post #11





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




zrobię tzw. UP postu

Lepiej tak jak pisał ~hombrerro
  1. <?php
  2. exec("polecenie 2>&1", $out);
  3. print_r($out);
  4. ?>


Wszytskie linie w tablicy, co jest przydatne


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
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 Wersja Lo-Fi Aktualny czas: 7.07.2025 - 15:38