skrypt PHP i wykonanie polecenia na serwerze dedykowanym - screen

Potrzebujesz pomocy z C, C++, perl, python, itp.
gacek.pl
Posty: 28
Rejestracja: 01 grudnia 2009, 20:28

Post autor: gacek.pl »

Rutek dokładnie o takie coś mi chodziło, zrobiłem tak jak pisałeś wszystko jest niby dobrze, polecenie ,,echo'' odpowiada lecz zerkam na serwer dedykowany w htop i polecenie jednak się nie uruchamia.
Czego może to być wina? Czy coś w poleceniu może jest jeszcze nie tak?

W p.php napisałem:

Kod: Zaznacz cały

<form action="wykonaj.php" method="post">
<fieldset>
    <legend>Wykonaj komendę</legend>
    <label for="port">Port</label>
    <input type="text" name="port" id="port" />
    <input type="submit" value="Wykonaj" />
    </fieldset>
</form>
W wykonaj.php napisałem:

Kod: Zaznacz cały

<?php
// Wymuszamy typ integer(liczbowy) na pobranych danych
$port = (int)$_POST['port'];
// Port nie może być zerowy, więc nie wykonujemy komendy
// Również wartość równoznaczną z zerem zmienna $port przyjmie w przypadku, kiedy będzie np. tekstem
if($port > 0) {
    echo shell_exec('MOJA KOMENDA -port '.$port);
    echo 'Wykonano zadanie';
}
Czy w wykonaj.php musi być zakończenie skryptu znakiem:

Kod: Zaznacz cały

 "?>"
bo bez i z końcówka nie wykonuje polecenia na serwerze dedykowanym..
Rutek
Posty: 6
Rejestracja: 20 marca 2010, 17:57

Post autor: Rutek »

Wszędzie w internecie znajdziesz z:

Kod: Zaznacz cały

 "?>"
ale Zend, który wkłada od groma roboty w rozwijanie PHP, zaleca nie używać tego zakończenia.
Wyświetla coś poza tekstem:

Kod: Zaznacz cały

Wykonano zadanie
Polecenie to ma ciągle działać? Jeżeli tak, to w tym momencie zakończenie działania skryptu PHP równa się zakończeniu działania polecenia. Jeżeli chcesz, aby te dwie rzeczy nie były od siebie zależne, musisz to wykonać tak:

Kod: Zaznacz cały

<?php
// Wymuszamy typ integer(liczbowy) na pobranych danych
$port = (int)$_POST['port'];
// Port nie może być zerowy, więc nie wykonujemy komendy
// Również wartość równoznaczną z zerem zmienna $port przyjmie w przypadku, kiedy $_POST['port'] będzie np. tekstem
if($port > 0) {    
    $spec = array(array("pipe", "r"));
    $proc = proc_open('MOJA KOMENDA --port '.$port, $spec, $pipes, shell_exec('pwd'));
    echo 'Wykonano zadanie';
}
ODPOWIEDZ