Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/Ubuntu] Jak z poziomu PHP wywołać polecenie ...
Forum PHP.pl > Forum > PHP
Babcia@Stefa
Witam, nie mogę zrobić zrzutu ekranu (zdjęcia) z poziomu PHP, w terminalu normalnie wszystko działa (nawet na koncie z ograniczeniami sprawdzałem).

  1. <?php
  2. $fp = fopen('../Data/ScreenPhotos/test.png', 'w');
  3. fwrite($fp, 'test');
  4. fclose($fp);
  5. echo shell_exec("scrot ../Data/ScreenPhotos/test.png");
  6. ?>


Tworzy plik test.png w folderze ../Data/ScreenPhotos, ale jego treścią dalej jest 'test' a nie już obrazek.
Dlaczego tworze plik z treścią test? - Właścicielem stworzonego pliku jest serwer

Z tego co widać to PHP nie ma uprawnień do wywołania polecenie "scrot ../Data/ScreenPhotos/test.png", ale jak można wywołać to polecenie/zmodyfikować aby PHP miał uprawnienia?

Pozdrawiam, WebNuLL
wookieb
Cytat(Babcia@Stefa @ 23.12.2008, 14:45:27 ) *
Dlaczego tworze plik z treścią test?

O ja pier....

Cytat
fwrite() zapisuje treść łańcuch do strumienia pliku wskazanego przez uchwyt .

Masz tak cholerną alergię na manuala i myślenie, ze to przechodzi ludzkie pojęcie.
http://pl.php.net/manual/pl/function.imagefttext.php
Babcia@Stefa
Cytat(wookieb @ 23.12.2008, 14:50:26 ) *
O ja pier....
Masz tak cholerną alergię na manuala i myślenie, ze to przechodzi ludzkie pojęcie.
http://pl.php.net/manual/pl/function.imagefttext.php


Za to ty masz alergię na czytanie ze zrozumieniem, nie pisz jak czytasz sam tytuł...

Chodzi mi o całkiem coś innego a nie pisanie po obrazu...

Pozdrawiam, WebNuLL
erix
Cytat
zmodyfikować aby PHP miał uprawnienia?

Dać uprawnienia dla other na rwx po uruchomieniu scrot?
Babcia@Stefa
Komu/czemu dać uprawnienia?
Katalog w którym zapisywane są zdjęcia ma 777, każdy może go dowolnie modyfikować.

@edit
Co masz na myśli pisząc "other"?

Pozdrawiam, WebNuLL
dr_bonzo
A nie jest czasem tak ze mozesz skrina zrobic tylko jak masz dostep do X-ow? A serwer nie ma...
pinochet
ja bym spróbował przez su
A jak nie to może troche głupsze rozwiązanie ale będzie działać
crontab -e
* * * * * * scrot ../Data/ScreenPhotos/test.png
chyba ze robisz cos w stylu browsershot :]
Babcia@Stefa
Cytat(dr_bonzo @ 24.12.2008, 01:09:20 ) *
A nie jest czasem tak ze mozesz skrina zrobic tylko jak masz dostep do X-ow? A serwer nie ma...


Nie za bardzo Cię rozumiem, Linux to dla mnie jeszcze jak to mówią "czarna magia".


Cytat(pinochet @ 24.12.2008, 01:50:30 ) *
ja bym spróbował przez su
A jak nie to może troche głupsze rozwiązanie ale będzie działać
crontab -e
* * * * * * scrot ../Data/ScreenPhotos/test.png
chyba ze robisz cos w stylu browsershot :]


Chodzi Ci o sudo?
To chyba odpada, bo PHP nie wpisze hasła haha.gif

To w Linuksach wbudowany jest Crontab?

Pozdrawiam, WebNuLL
kwiateusz
X to srodowisko graficzne, na windowsa tez jest cron (jakiś tam port or sth)
ultra_18
Jak sobie nie radzisz to możesz zmienić właściciela apache na root to na pewno bedziesz miał uprawnienia z poziomu php, zmiane wlasciciela odbywa sie w głownym pliku konfiguracyjnym apache bodajże apache2.conf
wrzasq
Cytat
nie ma uprawnień do wywołania polecenie "scrot ../Data/ScreenPhotos/test.png"

nie ma updawnien do tego konkretnie polecenia? czy moze w ogole nie mozesz z poziomu PHP uzywac polecen powloki? wtedy to konfiguracja PHP. wklej błąd, który zapewne sie pojawia.

ale tak jak dr_bonzo napisal - zeby zrobic screen'a musisz miec przeciez z czego go zrobic. ekran Xow nie jest dostepny (no chyba, ze byc sie w jakies kosmiczne cracki pobawil w socketach Xow) wiec jak chcesz to zrobic z poziomu PHP?

sudo i su to nie to samo -.-'. a crontab'a nie musisz robic przez root'a. w roocie ustawiasz crontab'a juzera z pod którego jest uruchamiane PHP i ten plik niech należy do tego juzera, wtedy możesz spokojnie go edytować z poziomu PHP. ale po co crontab to wykonywania polecenia z poziomu PHP? nie rozumiem obejścia.

i zamiast zadawac tyle pytan to poczytaj najpierw chociaz troche, bo widac, ze uniksowe systemy sa dla ciebie faktycznie "czarna magia" wiec szkoda zebyc tracil czas na cos, czego nawet nie zrozumiesz.
Babcia@Stefa
Cytat(wrzasq @ 25.12.2008, 00:21:53 ) *
nie ma updawnien do tego konkretnie polecenia? czy moze w ogole nie mozesz z poziomu PHP uzywac polecen powloki? wtedy to konfiguracja PHP. wklej błąd, który zapewne sie pojawia.

ale tak jak dr_bonzo napisal - zeby zrobic screen'a musisz miec przeciez z czego go zrobic. ekran Xow nie jest dostepny (no chyba, ze byc sie w jakies kosmiczne cracki pobawil w socketach Xow) wiec jak chcesz to zrobic z poziomu PHP?

sudo i su to nie to samo -.-'. a crontab'a nie musisz robic przez root'a. w roocie ustawiasz crontab'a juzera z pod którego jest uruchamiane PHP i ten plik niech należy do tego juzera, wtedy możesz spokojnie go edytować z poziomu PHP. ale po co crontab to wykonywania polecenia z poziomu PHP? nie rozumiem obejścia.

i zamiast zadawac tyle pytan to poczytaj najpierw chociaz troche, bo widac, ze uniksowe systemy sa dla ciebie faktycznie "czarna magia" wiec szkoda zebyc tracil czas na cos, czego nawet nie zrozumiesz.


Nie dostaję nic, żadnego błędu.

Polecenie "scrot --help" działa.

@wrzasq
Linuksa mam dopiero z pół miesiąca... jeszcze dystrybucję dla początkujących - Ubuntu.

Pozdrawiam, WebNuLL
Axexis
To pacnij spod użytkownika scrot ../Data/ScreenPhotos/test.png wleź na FTPa, sciagnij to cudo na kompa i spróbuj otworzyć. Zobaczysz po co Ci są iksy.

Pozdro


@edit:
Bo wiesz, zainspirowałeś mnie. Ale utwierdziłeś mnie tylko w przekonaniu do powyższej teorii iksów:

Cytat
axexis@gb5246-ovh:~$ scrot test.png
giblib error: Can't open X display. It *is* running, yeah?
axexis@gb5246-ovh:~$
wrzasq
sprobuj wykonac:
  1. <?php
  2. shell_exec('scrot twojeargumenty 2> bledy.log');
  3. ?>

to zapisze bledy do pliku, moze po prostu nie widzisz bledow, bo masz dostep tylko do strumienia wyjsciowego.

@edit:
to tylko po to, zeby sie dowiedziec, czemu bledow nie widac. nie zmienia to mojego stanowiska, potwierdzonego przez badania Axexis'a, ze tego sie po prostu nie da (tak latwo) zaimplementowac. jest to raczej oczywiste, ze ze strony nie zrobisz zrzutu ekranu, bo niby czego zrzut bys zrobil (biorac pod uwage, iz dziala to po stronie servera)?
pyro
czytalem tylko pare pierwszych postów ale:

możesz zmienić w pliku /etc/passwd powłokę serwera na inną, na taką, która pozwala mu na robienie screenow do pliku, bo jak widac mozesz tworzyc pliki, ktore beda mialy prawa serwera, tylko cos z poleceniem wykonania scr.

A także sprawdź czy masz włączony safe_mode, wtedy mozliwe jest tylko wykonywanie programów z safe_mode_exec_dir

Zobacz czy exec()'iem można robić inne rzeczy.
centergo
Cytat(dr_bonzo @ 24.12.2008, 01:09:20 ) *
A nie jest czasem tak ze mozesz skrina zrobic tylko jak masz dostep do X-ow? A serwer nie ma...

Cytat
dev:~# scrot
giblib error: Can't open X display. It *is* running, yeah?

Tak jest:-)
Babcia@Stefa
Cytat(Axexis @ 26.12.2008, 20:04:27 ) *
To pacnij spod użytkownika scrot ../Data/ScreenPhotos/test.png wleź na FTPa, sciagnij to cudo na kompa i spróbuj otworzyć. Zobaczysz po co Ci są iksy.

Pozdro
@edit:
Bo wiesz, zainspirowałeś mnie. Ale utwierdziłeś mnie tylko w przekonaniu do powyższej teorii iksów:


Działam tylko na localhoscie narazie (strona na żaden zwykły hosting WWW nie wejdzie =), tylko na serwer dedykowany), tak więc Twojego sposobu nie wypróbuję.


Cytat(wrzasq @ 26.12.2008, 20:18:37 ) *
sprobuj wykonac:
  1. <?php
  2. shell_exec('scrot twojeargumenty 2> bledy.log');
  3. ?>

to zapisze bledy do pliku, moze po prostu nie widzisz bledow, bo masz dostep tylko do strumienia wyjsciowego.

@edit:
to tylko po to, zeby sie dowiedziec, czemu bledow nie widac. nie zmienia to mojego stanowiska, potwierdzonego przez badania Axexis'a, ze tego sie po prostu nie da (tak latwo) zaimplementowac. jest to raczej oczywiste, ze ze strony nie zrobisz zrzutu ekranu, bo niby czego zrzut bys zrobil (biorac pod uwage, iz dziala to po stronie servera)?


Dzięki, spróbuję.
Widać że nie jest łatwo, ale warto spróbować winksmiley.jpg


Cytat(pyro @ 26.12.2008, 20:37:13 ) *
czytalem tylko pare pierwszych postów ale:

możesz zmienić w pliku /etc/passwd powłokę serwera na inną, na taką, która pozwala mu na robienie screenow do pliku, bo jak widac mozesz tworzyc pliki, ktore beda mialy prawa serwera, tylko cos z poleceniem wykonania scr.

A także sprawdź czy masz włączony safe_mode, wtedy mozliwe jest tylko wykonywanie programów z safe_mode_exec_dir

Zobacz czy exec()'iem można robić inne rzeczy.


Safe_mode z tego co pamiętam to wyłączyłem w całym projekcie poprzez .htaccess (chyba to było php_flag safe_mode off - nie pamiętam).
Mógłbyś jaśniej powiedzieć jak zmienić tą powłokę serwera?

Tworzenie zrzutów ekranu z poziomu PHP potrzebne mi jest do projektu aplikacji PHPFileRemote (zdalne sterowanie komputerem/serwerem), którą kiedyś dałem do oceny ale była tylko pod Windowsa, dziś śmiga również pod Linuksem i jest bardzo rozbudowana, pozwala już na bardziej zaawansowaną nawigację po plikach/folderach.

Kiedy skończę aplikację dam ponownie do oceny smile.gif

Pozdrawiam, WebNuLL
wrzasq
nie chodzi o zadna zmiane powloki, a ty chyba nie czytasz co wszyscy ci pisza. nie zrobisz tego w ten posob. zrobic zrzut ekranu mozesz tylko tej sesji (na dodatek graficznej) w ktorej dziala dany proces! nie wazne czy nawet zmienisz mu powloke logowania w jakis sposob na taka, pod ktora dostepna bedzie serwer X - w najlepszym wypadku (o ile w ogole sie da zrobic cos takiego) dostaniesz zrzut pustego pulpitu! serwer HTTP dziala jako deamon in ma osobna powloke logowania. zeby zrobic to, co ty probujesz zrobic, musialbys sie pobawic w komunikacje miedzyprocesowa, bo zrzut musi zostac wykonany z tej powloki, ktora chcesz obejrzec.
Babcia@Stefa
Cytat(wrzasq @ 28.12.2008, 19:09:32 ) *
nie chodzi o zadna zmiane powloki, a ty chyba nie czytasz co wszyscy ci pisza. nie zrobisz tego w ten posob. zrobic zrzut ekranu mozesz tylko tej sesji (na dodatek graficznej) w ktorej dziala dany proces! nie wazne czy nawet zmienisz mu powloke logowania w jakis sposob na taka, pod ktora dostepna bedzie serwer X - w najlepszym wypadku (o ile w ogole sie da zrobic cos takiego) dostaniesz zrzut pustego pulpitu! serwer HTTP dziala jako deamon in ma osobna powloke logowania. zeby zrobic to, co ty probujesz zrobic, musialbys sie pobawic w komunikacje miedzyprocesowa, bo zrzut musi zostac wykonany z tej powloki, ktora chcesz obejrzec.


Z tego co napisałeś wynika że praktycznie się nie da, piękna trafna odpowiedź wyjaśniająca wszystko.
Jeśli jednak jest jakiś sposób to proszę o pomoc.
Narazie zawieszam to w swoim projekcie ("Dostępne tylko w systemie operacyjnym Microsoft Windows" :/)

Z tego co zrozumiałem to serwer HTTP "nie widzi" tego co ja na ekranie haha.gif

Pozdrawiam, WebNuLL
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.