Как мне открыть vim из файла PHP, чтобы отредактировать какой-то другой файл, например, git, когда вы запускаете «git commit» без флага -m?
Я пробовал это решение Открыть Vim из PHP CLI
from-php-cli, но я получаю ошибку ввода-вывода с vim:
Vim: Предупреждение: выход не на терминал
Vim: Предупреждение: ввод не с конца?
Есть ли другой способ сделать это? наверное с bash или еще чего?
Vim — это интерактивный редактор. Полученная вами ошибка («Вывод не на терминал») является точным описанием проблемы. Вы не можете управлять Vim из скрипта PHP.
Если вам нужно передать текст, вы должны использовать альтернативные подходы, такие как вышеупомянутые -m
флаг или STDIN.
Итак, вы хотите выполнить скрипт 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.
Я смог сделать это с помощью метода proc_open с одним из решений из Открыть Vim из 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: простите за плохой английский>.<