3

在我的 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();
    }
}
4

2 回答 2

3

找到了我第二个问题的答案,但我仍然对您对整个方法的想法非常感兴趣。

// 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();
        }
于 2015-08-13T10:06:55.777 回答
0

除非您真的需要立即响应呼叫,否则最好将此类任务留给后台进程。

所以我要做的是编写一个或多个 Symfony 命令来执行所描述的过程(读取、解密等)。

这些进程可以通过 crontab 执行,或者通过另一个调度程序(如 Supervisord)“守护”。

然后,API 调用只创建某种触发实际执行的“信号量”文件,或者更好的是您可以使用某种队列系统。

于 2015-08-18T07:58:25.400 回答