Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.

Autor Téma: Odoslanie dát cez PHP » na PORT » a spustenie BASH príkazu  (Přečteno 1247 krát)

shamle

  • Návštěvník
  • *
  • Příspěvků: 4
    • Zobrazit profil
Zdravím Vás,

potreboval by som v Ubuntu na základe PHP spustiť BASH príkaz. (V Ubuntu mám z dôvodu bezpečnosti zakázané všetky execute príkazy exec/system/shell/...)

Chcel by som teda niečo takéto (ak nemáte niečo lepšie):
- otvoriť PORT povedzme 1234 a prepojiť ho na BASH script "/root/test.sh"
- cez PHP odoslať príkaz aj s nejakými parametrami (parameter1=kaciatko, parameter2=zlte) na otvorený port 1234
- a následne cez BASH script získať odoslané parametre

Kde nastavím aby sa údaje odoslané na port presmerovali na script "/root/test.sh"?
Ako by mal vyzerať PHP script? (predpokladám že sa použije príkaz "fsockopen")
Ako by mal vyzerať BASH script, ktorý mi zobrazí odoslané parametere?

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:Odoslanie dát cez PHP » na PORT » a spustenie BASH príkazu
« Odpověď #1 kdy: 16 Listopad 2016, 17:54:59 »
Tohle řešit čistě přes Bash je docela zoufalé, ale dobrá.
Navrhuji udělat takový skript v Bashi, který vytvoří dvě FIFO pomocí mkfifo, z první bude číst a do druhé bude zapisovat. Z PHP skriptu pak prostě otevřeš obě roury jako soubory.
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

shamle

  • Návštěvník
  • *
  • Příspěvků: 4
    • Zobrazit profil
Re:Odoslanie dát cez PHP » na PORT » a spustenie BASH príkazu
« Odpověď #2 kdy: 18 Listopad 2016, 12:11:24 »
Práve že by som danú možnosť potreboval riešiť cez porty, aby som PHP požiadavky mohol posielať aj mimo localhost na externý server. Sorry, že som nespomenul. Nižšie uvádzam koncept, kde by som potreboval konkrétne príkazy na doriešenie.

1. Otvorenie a nasmerovanie portu na skript. Všetko čo príde na 10.0.0.1:1234 bude smerovať na skript "/root/test.sh". Predpokladám, že sa použije niektorá z nasledujúcich možností "vi /etc/services" alebo "xinetd" alebo "netcat", no neviem ako.

2. Odoslanie parametrov cez PHP (toto mám asi zmáknute, myslím)
Kód: [Vybrat]
<?php

// NADVIAZANIE SPOJENIA
if ($fp fsockopen("10.0.0.1"1234)){ 

// ODOSLANIE PARAMETROV 
fwrite($fp"parameter1;parameter2");

// ZISKANIE ODPOVEDE
$odpoved ""; while (!feof($fp)){ $odpoved =. fgets($fp128); }

// UKONCENIE SPOJENIA
fclose($fp);

// VYKONANIE PRIKAZOV NA ZAKLADE ZISKANEJ ODPOVEDE

}

?>

3. Spracovanie parametrov cez BASH

Kód: [Vybrat]
#!/bin/bash

# ZISKANE DATA ULOZIT DO PREMENNEJ (prave tuto cast neviem)
ZISKANE_DATA=$1;

# DATA ROZTRIEDIT DO PREMENNYCH
PARAMETRE=$(echo $ZISKANE_DATA | tr ";" "\n");

# VYKONANIE PRIKAZOV NA ZAKLADE ZISKANYCH PARAMETROV A ULOZENIE ODPOVEDE DO PREMENNEJ "ODPOVED"

# ZOBRAZENIE ODPOVEDE
echo ${ODPOVED};

exit;

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:Odoslanie dát cez PHP » na PORT » a spustenie BASH príkazu
« Odpověď #3 kdy: 18 Listopad 2016, 15:00:22 »
Já tě nasměruji na moji původní variantu, kterou jsem zavrhnul - vytvoř ty dvě FIFO a pak udělej přemostění na TCP pomocí programo socat.
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04