извините, я отправил неправильный код раньше, но это снова вопрос.
я пытаюсь использовать pushd в exec из php, но рабочий каталог не меняется. Я получил пример кода в несколько строк:
<?php
exec('pwd; pushd abc/def/; pwd; popd; pwd; 2>&1', $output);
echo('<pre>');
print_r($output);
выход
Array
(
[0] => /var/www/html
[1] => /var/www/html
[2] => /var/www/html
)
Я хотел бы заранее поблагодарить вас всех за попытку ответить на этот вопрос.
Vinaka
По поводу вашего вопроса:
exec () создает новый процесс, который имеет собственный рабочий каталог, поэтому он не влияет на рабочую копию процесса, который его запустил. Просто введите «изменить рабочий каталог php» на стартовой странице вашего браузера и проведите небольшое исследование, которое не должно быть слишком сложным для поиска.
По поводу вашего кода:
Не каждая оболочка имеет pushd
встроенный. Например, по умолчанию / bin / sh в Debian нет, но вы этого не видите, потому что вы захватываете только stdout, а не stderr, несмотря на ваши попытки. Я бы посоветовал написать ваш код на PHP, вместо того, чтобы разбирать вывод оболочки.
Если вы хотите изменить каталог для текущего запущенного процесса PHP, используйте
chdir ( $directory )
Это возвращает истину / ложь в зависимости от успеха / неудачи.