Как открыть vim из файла PHP, чтобы отредактировать какой-либо другой файл, например git, когда вы запускаете "git commit" без флага -m?
Я пробовал это решение Open Vim From PHP CLI из-php-cli, но он вызывает у меня некоторую ошибку ввода-вывода с vim:
Vim: Предупреждение: выход не на терминал Vim: Предупреждение: вход не от терминала?
есть ли другой способ сделать это? вероятно, с bash или чем-то еще?
Я смог сделать это с помощью метода proc_open с одним из решений Open Vim From PHP CLI и цикла, который постоянно проверяет, продолжает ли процесс. Закончив редактирование, он продолжает запускать скрипт.
$descriptors = array(
array('file', '/dev/tty', 'r'),
array('file', '/dev/tty', 'w'),
array('file', '/dev/tty', 'w')
);
$process = proc_open($_SERVER['EDITOR']. $filename, $descriptors, $pipes);
//if(is_resource($process))
while(true){
if (proc_get_status($process)['running']==FALSE){
break;
}
}
Это не очень элегантно, но это делает работу :)
PS: Прошу прощения за плохой английский>. <
Vim - это интерактивный редактор. Ошибка, которую вы получаете ("Выход не к терминалу"), является точным описанием проблемы. Вы не можете контролировать Vim из PHP-скрипта.
Если вам нужно передать текст, вы должны использовать альтернативные подходы, такие как вышеупомянутый флаг -m
или STDIN.
file_get_contents
), отредактировать строку и затем сохранить ее снова.
Итак, вы хотите выполнить скрипт bash с PHP?
Взгляни на:
shell_exec()
exec()
http://php.net/manual/de/function.shell-exec.php
http://php.net/manual/de/function.exec.php
Первый будет возвращать данные из выполненной команды, если вы сделаете cat file.txt
вы получите строку, содержащую содержимое файла file.txt
Если вы используете exec, он не вернет вывод std, но вернет true/false, если данная команда была успешной.
Теперь вы можете написать простой скрипт bash, который обрабатывает текст, а затем выполняет его через PHP.
$ git commit
но вы даже не смотрите на то, как это происходит.