2015-09-15 4 views
1

Мне нужно запустить команду linux из php. Поэтому я использовал функцию ftp_exec().ftp_exec(): Неизвестная команда SITE

$command='ls -al> /ftp_test/t.log'; 
if (ftp_exec($ftp_conn,$command)) 
    { 
    echo "$command executed successfully."; 
    } 
    else 
    { 
    echo "Execution of $command failed."; 
    } 

Но это дает мне предупреждение

Предупреждение: ftp_exec(): Неизвестная команда SITE

Я гугле и нашел для ftp_exec «исполнение через FTP не очень широко поддерживается Убедитесь, что он работает на серверах, к которым вы собираетесь подключиться, прежде чем начинать кодировать то, что требует этого ».

Может ли кто-нибудь дать мне идею запустить команду linux из php?

ответ

0

Если у вас есть соответствующее разрешение, вы можете сделать это через SSH:

$file_list = shell_exec('ssh [email protected] "ls -la"'); 

Вам нужно для user иметь авторизованный ключ SSH для site, и пользователь должен быть доступен из любого пользователя работает PHP. Обычно это сводится к использованию пользователя wwwrun для обоих.

Или вы можете использовать sudo для дополнительной безопасности, поместив команду в сценарий своей собственной, то sudoing его:

$file_list = shell_exec('sudo /usr/local/bin/ssh-ls-site'); 

Теперь пользователь wwwrun может быть разрешено запускать ssh-ls-site, но не может изменить его содержимое, чтобы он не мог выполнять произвольные команды и не имел доступа к ключу авторизации ssh.

ssh-ls-site может регистрировать запрос, а также обновлять локальный файл маркера и немедленно выходить, если файл является более новым, чем определенное время защиты. Это предотвратит возможные атаки DoS на сайт (выполняется лотов разрешенных команд, исчерпывающие ресурсы), а также улучшает производительность; если, например, вам нужно часто запускать команду, вы можете сохранить результаты во временный файл. Затем, если этот файл будет найден, и он не слишком стар, вы просто читаете его содержимое, а не запрашиваете его @site, эффективно кэшируя команду локально.

Смежные вопросы