Skocz do zawartości


 

Zdjęcie

przeniszenie zmiennej z php do sh

przeniszenie zmiennej z php do sh

  • Proszę się zalogować aby odpowiedzieć
18 odpowiedzi na ten temat

przeniszenie zmiennej z php do sh

#1 pawelwel

pawelwel

    Nowy użytkownik

  • Użytkownicy
  • 21 postów

Napisany 26 lipiec 2017 - 10:30

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ł


  • 0

#2 Kszysiu

Kszysiu

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1423 postów
  • Skąd:Milanówek
  • Firma:Tiktalik.com
  • Imię:Krzysztof
  • Nazwisko:Wojciechowski

Napisany 26 lipiec 2017 - 11:08

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?


  • 0

#3 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 26 lipiec 2017 - 11:09

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/manua...tion.system.php

http://php.net/manua...nction.exec.php
http://php.net/manua....shell-exec.php
http://php.net/manua...n.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 >
 

 


  • 0

#4 Vasthi

Vasthi

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 647 postów

Napisany 26 lipiec 2017 - 11:31

Nie wiem co masz na myśli pisząc

 

ale jak chcesz wykonać jakieś pocenie powłoki z poziomu PHP zainteresuj się funkcjami:
http://php.net/manua...tion.system.php

http://php.net/manua...nction.exec.php
http://php.net/manua....shell-exec.php
http://php.net/manua...n.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 >
 

 

 

 

Bez problemu udaje mi się uruchamiać ze skryptu php mój skypt bash i wyświetlić go w php,

Kszysiu dał jedno z najprostszych rozwiązań. 


  • 0

#5 Gość_Spoofy_*

Gość_Spoofy_*
  • Goście

Napisany 26 lipiec 2017 - 11:33

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?


Edytowany przez Spoofy, 26 lipiec 2017 - 11:37.

  • 0

#6 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 26 lipiec 2017 - 11:42

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 ...


  • 0

#7 Kszysiu

Kszysiu

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1423 postów
  • Skąd:Milanówek
  • Firma:Tiktalik.com
  • Imię:Krzysztof
  • Nazwisko:Wojciechowski

Napisany 26 lipiec 2017 - 12:49

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 ;)


  • 0

#8 pawelwel

pawelwel

    Nowy użytkownik

  • Użytkownicy
  • 21 postów

Napisany 26 lipiec 2017 - 15:20

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.


Edytowany przez pawelwel, 26 lipiec 2017 - 15:20.

  • 0

#9 Kszysiu

Kszysiu

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1423 postów
  • Skąd:Milanówek
  • Firma:Tiktalik.com
  • Imię:Krzysztof
  • Nazwisko:Wojciechowski

Napisany 26 lipiec 2017 - 15:37

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.


  • 0

#10 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 26 lipiec 2017 - 16:06

Sorry, ale masakra odpalać shell_exec i basha do skopiowania plików z poziomu php :blink:

 

Zainteresuj się:

http://php.net/manua...nction.copy.php

http://php.net/manua...oryiterator.php

 

 


  • 0

#11 pawelwel

pawelwel

    Nowy użytkownik

  • Użytkownicy
  • 21 postów

Napisany 26 lipiec 2017 - 16:13

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ć

  • 0

#12 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 26 lipiec 2017 - 16:24

Jak wykonujesz operacje z poziomu php to nie jesteś jako user root :)
http://php.net/manua...ction.chown.php

http://php.net/manua...ction.chmod.php

 

 


  • 0

#13 pawelwel

pawelwel

    Nowy użytkownik

  • Użytkownicy
  • 21 postów

Napisany 26 lipiec 2017 - 16:38

tak, ale kopiuje mi do innego usera z tego skryptu, skoro skopiował ten plik to  dlaczego praw nie moze przydzielić ?

jest jakiś sposób?


  • 0

#14 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 26 lipiec 2017 - 18:07

Jeśli mowa o skryptach powłoki to musiał być zastosować sudo

Zobacz w Google https://www.google.p...hp as root sudo

$outPut = shell_exec("echo password_for_the_user | sudo -S command_to_execute");
echo "<pre>$outPut</pre>";

Edytowany przez systemy.internetowe, 26 lipiec 2017 - 18:09.

  • 0

#15 pawelwel

pawelwel

    Nowy użytkownik

  • Użytkownicy
  • 21 postów

Napisany 26 lipiec 2017 - 18:17

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 ?


  • 0

#16 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 26 lipiec 2017 - 18:24

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://stackoverflo...o-in-shell-exec


  • 0

#17 pawelwel

pawelwel

    Nowy użytkownik

  • Użytkownicy
  • 21 postów

Napisany 27 lipiec 2017 - 14:41

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.


  • 0

#18 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 27 lipiec 2017 - 15:17

Cron nie wywołuje się z interwałem sekundowym, ale minutowym. Chyba, że można to ustawić w konfiguracji linuxa ;)


  • 0

#19 pawelwel

pawelwel

    Nowy użytkownik

  • Użytkownicy
  • 21 postów

Napisany 27 lipiec 2017 - 17:07

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


  • 0





0 użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników