Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-07-23 21:22:28

  robson_ek - Nowy użytkownik

robson_ek
Nowy użytkownik
Zarejestrowany: 2008-07-23

NC -> Serwer z DA -> shell_exec | Nie pokazuje danych!

Witam,

Jestem informatykiem z zamiłowania i szkoły (PK Inf 2 rok). Mam ciekawy problem, który wydaje się być bardzo prosty do rozwiązania... ale niestety w moim przypadku tak nie jest...

---------------------------------------------------------
Zadanie:
Napisać skrypt w PHP pobierający dane z programu nc.
---------------------------------------------------------

Rozwiązanie:
Z pomocą przychodzi nam funkcja PHP shell_exec, która może wyświetlać wyniki,które widzimy w bashu łącząc się przez SSH.

Przykładowy kod:

<?php
$output = shell_exec('nc -v -z linux.pl 80');
echo "<pre>$output</pre>";
?>
---------------------------------------------------------

Problem:

funkcja shell_exec nie zwraca żadnych wyników dla programu nc. Natomiast jeżeli jako komendę wpisze listowanie plików: (shell_exec('ls -lart');) to na ekranie bardzo ładnie ukaże się zawartość katalogu.

---------------------------------------------------------

Moje pytanie:
Dlaczego u mnie nie chce się nic pokazać, jeżeli listowanie plików działa i kilka innych komend. Nawet ping po skróceniu jego działania (np: -c 4) ładnie wyświetla się na stronie.


---------------------------------------------------------
Moja walka:

Próbowałem zapisywać plik po przez (>) nawet na kilku powłokach (2>&1) i niestety nic nie było zwracane...
Jeżeli natomiast wpiszę te same dane w bashu to wszystko ładnie chodzi, plik jest zapisywany i zawiera treść.

---------------------------------------------------------
Moja maszyna:

Serwer w OVH kimstufii XXL wraz z panelem Direct Admin.


Proszę o pomoc bo nie mam pojęcia co może być przyczyną.

Jeżeli brakuje jakichś informacji proszę pisać a na pewno je zamieszczę i każdą propozycje rozwiązania problemu przetestuje.

Offline

 

#2  2008-07-23 22:49:27

  rychu - elektryk dyżurny

rychu
elektryk dyżurny
Skąd: gdańsk/kalmar
Zarejestrowany: 2004-12-28

Re: NC -> Serwer z DA -> shell_exec | Nie pokazuje danych!

niezbyt eleganckie, ale może zadziałać: zrób tak, żeby wynik działania nc został zapisany do jakiegoś tymczasowego pliku, i następnie zawartość tego pliku wywal na ekran


linux regd. user #248790

Offline

 

#3  2008-07-23 23:02:26

  robson_ek - Nowy użytkownik

robson_ek
Nowy użytkownik
Zarejestrowany: 2008-07-23

Re: NC -> Serwer z DA -> shell_exec | Nie pokazuje danych!

rychu tak robiłem... Opisałem to w moja walka... Plik zapisywałem i potem próbowałem odczytać po przez PHP ale niestety kiedy wywołuję nc z shell_execa (PHP) nie jest tworzony ten plik :/

Tak wyglądała moja komenda:
nc -v -z -i 2 -w 2 adres.pl 21 22 80 >nc_exit 2>&1


I nc_exit w ogóle nie był tworzony:/ a jeżeli takie coś zrobię w bashu to wszystko działa. Dodam że jest to robione w obrębie tego samego konta (usera)

Offline

 

#4  2008-07-23 23:17:00

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: NC -> Serwer z DA -> shell_exec | Nie pokazuje danych!

robson_ek napisał(-a):

a jeżeli takie coś zrobię w bashu to wszystko działa. Dodam że jest to robione w obrębie tego samego konta (usera)

Ja tam się nie znam, ale skrypty PHP bardzo często działają na ograniczonych uprawnieniach, nawet jeżeli wykonywane są z katalogu public_html użytkownika.

Spróbuj zalogować się przez SSH (bo rozumiem masz taki dostęp) i uruchomić:

Kod:

/usr/bin/php /sciezka/do/Twojego/skryptu.php

Offline

 

#5  2008-07-23 23:17:21

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: NC -> Serwer z DA -> shell_exec | Nie pokazuje danych!

Wątpię, żeby to akurat pomogło, ale podobno (o php to ja bardziej słyszałem, niż praktykowałem) argumenty należy podawać w escapeshellarg().Spróbuj też zamiast shell_exec() np. exec() lub system().

Rozwiązanie obrzydliwie barbarzyńskie — przez php wywołać skrypt powłoki. Ale to ostateczność.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#6  2008-07-24 00:17:57

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: NC -> Serwer z DA -> shell_exec | Nie pokazuje danych!

zadziala:

Kod:

system('nc -v -z linux.pl 80 2>&1');

problem polega na tym ze nc pisze na stderr ... a w shell_exec nie mozna przekierowywac strumieni - zwroc uwage na roznice pomiedzy system() a shell_exec() - np.:

Kod:

system('for f in `seq 20 30`; do echo $f; done');
shell_exec('for f in `seq 20 30`; do echo $f; done');

(uwaga: jezeli php chodzi w trybie bezpiecznym przekierowania stryumieni w sysstem nie beda dzialac)


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#7  2008-07-24 00:33:36

  robson_ek - Nowy użytkownik

robson_ek
Nowy użytkownik
Zarejestrowany: 2008-07-23

Re: NC -> Serwer z DA -> shell_exec | Nie pokazuje danych!

bercik jesteś WIELKI

Serdeczne Ci bóg zapłać ;D

Ostatnio edytowany przez robson_ek (2008-07-24 16:49:12)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)