Выполнение файла PHP - PullRequest
       1

Выполнение файла PHP

1 голос
/ 11 марта 2011

Эй, я пытаюсь использовать PHP для выполнения команды оболочки, которая будет запускать удаленно запуск сервера на моем компьютере. Вот мой PHP-код:

if ($key == "test") { echo "<font color='green'>Key is valid. Server satrted.</font>";
   $start = system('cd /root/st/; ls;');
}

Проблема в том, что команда ls запускается из того же каталога, что и веб-сервер, который возвращает все файлы из / var / www / html вместо / root / st /. Я также попробовал команду chdir безрезультатно. Кто-нибудь знает, как можно заставить каталог измениться так, чтобы команда могла быть запущена из указанного каталога? Спасибо.

Ответы [ 5 ]

2 голосов
/ 11 марта 2011

Имеет ли пользователь, с которым работает PHP (например, пользователь, вызывающий скрипт CLI), разрешение на чтение каталога? Если вы входите в /root/, но не root, вам нужно либо добавить cd в sudoers для текущего пользователя, либо выбрать другой каталог.

Редактировать: обратите внимание, что добавление cd к sudoers даже удаленно не подходит ни для чего, кроме локального сценария, предназначенного только для вас. :)

1 голос
/ 11 марта 2011

Я бы подошел к этому двумя способами.

1: используйте правильные команды Unix и посмотрите, работают ли они.IE:

if ($key == "test") { echo "<font color='green'>Key is valid. Server satrted.</font>";
    $start = system('ls /root/st/');
}

2: Заставить его запустить в системе скрипт, который может выходить за пределы chroot веб-сервера.

if ($key == "test") { echo "<font color='green'>Key is valid. Server satrted.</font>";
    $start = system('server.sh');
}

, а server.sh равен

#!/bin/bash
cd /root/st
ls
0 голосов
/ 11 марта 2011

Ваша проблема не в каталоге, в котором выполняется скрипт (или, точнее, в текущем рабочем каталоге пользователя, выполняющего скрипт), но в том, что cd /root/st/ не будет работать в любой разумно сконфигурированной системе UNIX / Linux. /root обычно принадлежит root и не может быть доступен любому другому пользователю.

Используя ваш фрагмент, вы молча потерпите неудачу, потому что вы безоговорочно приковали команды cd и ls точкой с запятой вместо &&.

0 голосов
/ 11 марта 2011

Сохраните местоположение в переменной, скажем $loc = '/root/st', а затем введите ls $loc в своем коде. Надеюсь, это поможет.

0 голосов
/ 11 марта 2011

PHP имеет функцию chdir(). Не уверен, относится ли это к вызовам exec / system, но стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...