pawelwel 0 Zgłoś post Napisano Lipiec 26, 2017 Witajcie, Na początku dodam, że ogarniam podstawy obu języków. Bez problemu udaje mi się uruchamiać ze skryptu php mój skypt bash i wyświetlić go w php, kolejnym etapem jest przeniesienie dwóch zmiennych z php do bash, daty w formie 2017-07-26 i numeru kilkunastocyfrowego pisanego w jednym ciągu bez żadnych znaków. Proszę o podpowiedź Pozdrawiam, PAweł Udostępnij ten post Link to postu Udostępnij na innych stronach
Kszysiu 136 Zgłoś post Napisano Lipiec 26, 2017 uruchamiasz skrypt bash z parametrami np: ./skrypt lol1 lol2a w tresci masz echo $1 #wyswietli lol1echo $2 #wysiwetli lol2chyba najprostrze. Możesz ewentualnie użyć jakiegoś argparsera, żeby uzyskać np -u zmienna1 -d zmienna2Pytanie po co w sumie mieszać te języki? Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Lipiec 26, 2017 Nie wiem co masz na myśli pisząc przeniszenie zmiennej z php do sh ale jak chcesz wykonać jakieś pocenie powłoki z poziomu PHP zainteresuj się funkcjami:http://php.net/manual/en/function.system.php http://php.net/manual/en/function.exec.phphttp://php.net/manual/en/function.shell-exec.phphttp://php.net/manual/en/function.proc-open.php W zależności funkcji dostarczają mniejszy lub większy zestaw API.Uwaga -te funkcje mogą być domyślnie wyłączone w php < phpini > Udostępnij ten post Link to postu Udostępnij na innych stronach
Vasthi 74 Zgłoś post Napisano Lipiec 26, 2017 (edytowany) Edytowano Marzec 26, 2018 przez Vasthi (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość Spoofy Zgłoś post Napisano Lipiec 26, 2017 (edytowany) Witaj,Po pierwsze, odradzam w jakikolwiek sposób korzystanie na produkcji z w/w funkcji, takich jak "shell-exec" czy inne.Po drugie, ciężko po takim opisie dojść do tego co próbujesz właściwie zrobić - Twój skrypt może dawać jakiś output i wtedy łatwo taki output określić jako zmienną, tak jak napisał to @Krzysiu : <?php$i = 'cos'; echo $i;?>#!/bin/bash$i = '$(php skrypt.php)'echo '$i' Po trzecie, nie łatwiej jest "wypluć" jakąś datę za pomocą czystego PHP? Edytowano Lipiec 26, 2017 przez Spoofy (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Lipiec 26, 2017 Po pierwsze to inaczej z poziomu PHP nie wywoła żadnej komendy powłoki jak nie za pomocą funkcji do tego celu przeznaczonych. Po kolejne jak wyżej ... Udostępnij ten post Link to postu Udostępnij na innych stronach
Kszysiu 136 Zgłoś post Napisano Lipiec 26, 2017 Może autor tematu podzieli się z nami informacją co mniej więcej chce osiągnąć, to będzie nam łatwiej mu powiedzieć, dlaczego ma tak nie robić i może znajdziemy lepsze rozwiązanie niż odpalanie bash'a z php'a Udostępnij ten post Link to postu Udostępnij na innych stronach
pawelwel 0 Zgłoś post Napisano Lipiec 26, 2017 (edytowany) Witajcie, Generalnie samemu rozwiązałem problem, okazało się to takie banalne, że do tej pory nie wierzę, że to działa. Teraz widzę, że zrobiłem to dokładnie jak napisał Kszysiu - dzięki Dlaczego mieszam te języki? Prowadzę dość duży serwer multi pewnej gry, serwer leży na linuxie. Gra ma błędy, i czasem zdarza się, że trzeba przytwrócić kopię plików konkretnego gracza, Ponieważ admini boją się linuxa, chciałem im zrobić jakieś narzędzie. Już Wam pokazuję skrypty.. Pierwszy skryot jest do prowadzenia danych, numer gracza i data kopii (foldery sie same generują w php), tego pliku chyba nie ma co pokazywać, następnie poprzez formularz (wiem, zamienie , GET na POST) <?php $STEAMID=$_GET['numergracza']; $datakopii=$_GET['datakopii']; echo "<br>"; echo "data przywrócenia kopii=".$datakopii; $script="/var/www/html/skrypt/plik.sh".' '.$numergracza.' '.$datakopii; $message = shell_exec($script); echo $message; echo "<br>"; echo $script; ?> następnie wykonuje sie zwykle kopiowanie za pomocą parametrów $1 i $2 za pomocą skryptu .sh najbardziej męcze się ze składniami dzięki za liczne odpowiedzi. Edytowano Lipiec 26, 2017 przez pawelwel (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Kszysiu 136 Zgłoś post Napisano Lipiec 26, 2017 Wg mnie dużo lepiej, żeby wykonać to kopiowanie już bezpośrednio za pomocą php.Chociaż mi się wydaje, że do tego fajnie się nadaje python. Serwerek www bardzo prosty stawia się z użyciem bottle. Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Lipiec 26, 2017 Sorry, ale masakra odpalać shell_exec i basha do skopiowania plików z poziomu php Zainteresuj się: http://php.net/manual/en/function.copy.php http://php.net/manual/en/class.directoryiterator.php Udostępnij ten post Link to postu Udostępnij na innych stronach
pawelwel 0 Zgłoś post Napisano Lipiec 26, 2017 Tak sobie to wymyśliłem, ale faktycznie może lepiej kopiować za pomocą php Ale to dobra nauka dla mnie, bo php + bash przyda mi się aby sie łączyć z telnetem do konsoli gry, także nauka nie poszła w las.... Mam jeszcze ostatni problem, po skopiowaniu plików, próbuję w tym samym skrypcie zmienić uprawnienia chown, chown user /var/www/html/Players/$1.ttp ściezka jest na 100% dobra, bo jak skopiuję linię i wkleję bezpośrednio do konsoli, to wykonuje operację wszystkie pliki są jako root, więc dostep powinien być Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Lipiec 26, 2017 Jak wykonujesz operacje z poziomu php to nie jesteś jako user root http://php.net/manual/en/function.chown.php http://php.net/manual/en/function.chmod.php Udostępnij ten post Link to postu Udostępnij na innych stronach
pawelwel 0 Zgłoś post Napisano Lipiec 26, 2017 tak, ale kopiuje mi do innego usera z tego skryptu, skoro skopiował ten plik to dlaczego praw nie moze przydzielić ? jest jakiś sposób? Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Lipiec 26, 2017 (edytowany) Jeśli mowa o skryptach powłoki to musiał być zastosować sudo Zobacz w Google https://www.google.pl/search?q=php+as+root+sudo $outPut = shell_exec("echo password_for_the_user | sudo -S command_to_execute"); echo "<pre>$outPut</pre>"; Edytowano Lipiec 26, 2017 przez systemy.internetowe (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
pawelwel 0 Zgłoś post Napisano Lipiec 26, 2017 Dzięki, Wiem co to sudo, używam nawet Nie rozumiem zastosowania tego skryptu,hasło do usera? ale do którego usera?? A co ze zmianą uprawnień do pliku ? Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Lipiec 26, 2017 By wykonać komendę zmiany grupy user jaki ją ma wykonać musi mieć uprawnienia, więc w shell_exec przełączasz się na takiego usera. Popatrz pod tym linkiem z google są tam przykłady. Urzytkownik PHP lub apache nie ma takich uprawnień. https://stackoverflow.com/questions/5652986/php-sudo-in-shell-exec Udostępnij ten post Link to postu Udostępnij na innych stronach
pawelwel 0 Zgłoś post Napisano Lipiec 27, 2017 Nie chciałem w plikach php zostawiać haseł, więc wymyśliłęm to w ten sposób - akurat spełnia moje wymagania i chyba to bezpieczniejsze rozwiązanie. Plik PHP zapisuje plik z danymi Następnie poprzez crona (co 1 sekundę) otwiera sie skrypt sh który sprawdza, czy php zostawił plik, jeśli tak, to otwiera kolejny sh, ktory pobiera dane z pliku, kopiuje gdzie trzeba, ustawia uprawnienia i kasuje pliki tymczasowe, i wsio Wiem, że skrypt działa do 1 minuty, ale akurat mnie to odpowiada. Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Lipiec 27, 2017 Cron nie wywołuje się z interwałem sekundowym, ale minutowym. Chyba, że można to ustawić w konfiguracji linuxa Udostępnij ten post Link to postu Udostępnij na innych stronach
pawelwel 0 Zgłoś post Napisano Lipiec 27, 2017 tak, co minutę, ale zawsze mozna zrobic jakąś pętle w pliku tak czy siak miałęm na myśli minutę - na końcu sie poprawiłem Udostępnij ten post Link to postu Udostępnij na innych stronach
MarioN2 0 Zgłoś post Napisano Luty 11, 2018 jeżeli nie ma sesnownego api to nie widze lepszego rozwiazania nic <?php$i = 'cos'; echo $i;?>#!/bin/bash$i = '$(php skrypt.php)'echo '$i' Udostępnij ten post Link to postu Udostępnij na innych stronach