Подтвердить что ты не робот

Команда PHP exec(): как указать рабочий каталог?

My script, позвоните ему в execute.php, необходимо запустить оболочку script, которая находится в подпапке Scripts. script должен быть выполнен так, что его рабочий каталог - это скрипты. Как выполнить эту простую задачу в PHP?

Структура каталогов выглядит следующим образом:

execute.php
Scripts/
    script.sh
4b9b3361

Ответ 1

Либо вы перейдете в этот каталог в команде exec (exec("cd Scripts && ./script.sh")), либо измените рабочий каталог процесса PHP, используя chdir().

Ответ 2

Текущий рабочий каталог совпадает с текущим рабочим каталогом PHP script.

Просто используйте chdir(), чтобы изменить рабочий каталог перед exec().

Ответ 3

Для большего контроля над тем, как будет выполняться дочерний процесс, вы можете использовать функцию proc_open():

$cmd  = 'Scripts/script.sh';
$cwd  = 'Scripts';

$spec = array(
    // can something more portable be passed here instead of /dev/null?
    0 => array('file', '/dev/null', 'r'),
    1 => array('file', '/dev/null', 'w'),
    2 => array('file', '/dev/null', 'w'),
);

$ph = proc_open($cmd, $spec, $pipes, $cwd);
if ($ph === FALSE) {
    // open error
}

// If we are not passing /dev/null like above, we should close
// our ends of any pipes to signal that we're done. Otherwise
// the call to proc_close below may block indefinitely.
foreach ($pipes as $pipe) {
    @fclose($pipe);
}

// will wait for the process to terminate
$exit_code = proc_close($ph);
if ($exit_code !== 0) {
    // child error
}

Ответ 4

Если вам действительно нужен ваш рабочий каталог для сценариев, попробуйте:

exec('cd /path/to/scripts; ./script.sh');

В противном случае,

exec('/path/to/scripts/script.sh'); 

должно быть достаточно.

Ответ 5

Это не лучший способ.

Передача следующего в функцию exec также будет выполняться. /scripts.sh, который теперь может удалить всю систему UNIX - при запуске в пути:

exec ('cd/patto/scripts;./script.sh');

Использовать && (Чтобы выполнить только вторую команду после успешного завершения первого) вместо параметра; (полуплотня), что напоминает нажатие клавиши ввода.