Не удается запустить команду «cd» в PHP shell_exec()

#php

#php

Вопрос:

Недавно я получил свой ноутбук с настройкой Apache на Ethernet-соединении моего университета. Теперь я могу подключиться к своему компьютеру из любого места, если у меня есть либо IP-адрес, либо имя хоста (которое я могу выбрать). Теперь я хочу создать веб-командную строку, которая позволит мне запускать команды на моем ноутбуке с любого устройства.

Одна из проблем заключается в том, что я не могу запустить команду «cd». У меня настроен PHP-скрипт, чтобы он мог запускать серию команд, разделенных символом новой строки. Итак, я запускаю «cd .. /», а затем «pwd», но он все еще находится в корневом каталоге моего веб-приложения. Как мне это исправить?

Комментарии:

1. Хотя я сам не голосовал против, я бы предположил, что это произошло, потому что это крайне небезопасный обходной путь для проблемы, которая была решена давно: просто используйте SSH. SSH доступен на Mac, Android, Linux, BSD … и если вы на Windows, используйте putty, это небольшая загрузка.

Ответ №1:

Если вы сделаете это:

  shell_exec("cd ..");
 shell_exec("pwd");
  

Тогда вторая команда будет выполнена с новой оболочкой, которая имеет тот же начальный каталог, что и первая, потому что это подпроцесс текущего PHP.

Изменение текущего каталога с первым shell exec не продлится до второго. Такая серия зависимых команд оболочки работает только при одновременном выполнении всех:

  shell_exec("cd .. ; pwd");
  

Комментарии:

1. С помощью popen можно ли открыть /bin/ bash и отправить с помощью команд fwrite?

Ответ №2:

Я думаю, вам нужно изменить каталог текущего процесса / скрипта. Вы делаете это с chdir помощью . Затем вы можете запустить shell_exec .

Я полагаю, вы понимаете, какие серьезные проблемы с безопасностью создает ваше решение…

Комментарии:

1. Спасибо, что ответили на вопрос, а также подняли вопросы безопасности. Слишком часто люди просто говорят: «Это небезопасно, не делайте этого», фактически не помогая. Это было освежающее изменение по сравнению с этим.