在我的Symfony应用程序中,我需要对文件进行多项操作:目录中的文件列表,使用gpg解密它们,使用外部软件解析输出并再次加密。
我的第一个问题是:这是解决这个问题的正确方法吗?在另一种情况下,我已经编写了bash / python脚本来执行此操作,但是因为从Symfony API中读取了信息(用户ID,密码等),尽管将调用嵌入到应用程序中非常方便。
我的第二个问题更具体:有没有办法有效地处理命令行输出和错误?例如,当我打电话给' ls'如何轻松地将输出转换为文件名数组?
private function decryptAction()
{
$user_data_source = '/Users/myuser/datafiles/';
// Scan directory and get a list of all files
$process = new Process('ls ' . $user_data_source);
try {
$process->mustRun();
$files = explode(' ', $process->getOutput());
return $files;
} catch (ProcessFailedException $e) {
return $e->getMessage();
}
}
答案 0 :(得分:0)
找到第二个问题的答案,但我对你对整个方法的看法仍然很感兴趣。
// Scan directory and get a list of all files
$process = new Process('ls -1 ' . $user_data_source);
try {
$process->mustRun();
$files = array_filter( explode("\n", $process->getOutput()), 'strlen');
return $files;
} catch (ProcessFailedException $e) {
return $e->getMessage();
}
答案 1 :(得分:0)
除非您确实需要通过电话立即响应,否则此类任务最好留给后台进程。
所以我要做的是编写一个或多个执行所描述过程的Symfony命令(读取,解密等)。
这些进程可以通过crontab执行,或者通过另一个调度程序(如Supervisord)执行“守护进程”。
然后,API调用只会创建某种触发实际执行的“信号量”文件,甚至可以更好地使用某种队列系统。