Skocz do zawartości
pawelwel

przeniszenie zmiennej z php do sh

Polecane posty

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

uruchamiasz skrypt bash z parametrami np: ./skrypt lol1 lol2

a w tresci masz

echo $1 #wyswietli lol1
echo $2 #wysiwetli lol2

chyba najprostrze. Możesz ewentualnie użyć jakiegoś argparsera, żeby uzyskać np -u zmienna1 -d zmienna2

Pytanie po co w sumie mieszać te języki?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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.php
http://php.net/manual/en/function.shell-exec.php
http://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
Gość Spoofy

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 przez Spoofy (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

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

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 przez pawelwel (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

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

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

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 przez systemy.internetowe (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

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

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

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

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

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×