使用PHP保持shell打开以允许多次调用?

时间:2009-10-19 14:47:42

标签: php unix shell

在使用PHP关闭shell会话之前,如何允许shell会话保持打开状态?

在我的示例中,我想使用NcFtp通过shell命令发布一些文件。我想离开PHP的内置FTP,因为它慢得多,性能也是一个问题。

使用ncftpput发布文件或目录很容易。但是如果我想循环说出10个文件的数组,那么脚本必须登录,发布,注销,登录,发布,注销......

如果像这样的东西可以起作用会更方便。

shell_exec('ncftp -u username -p password');

foreach ( $files as $file )
{
    shell_exec('put '.$file['local_path'].' '.$file['remote_path']);
}

shell_exec('quit');

有可能吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您只需要访问一个流程,则可以使用popen()proc_open()来执行此操作。

这样的事情可能有用:

$handle = popen('ncftp -u username -p password'  , 'w');

foreach ( $files as $file ) {
    fwrite($handle, 'put ' . $file['local_path']. ' '.$file['remote_path'] . "\n");
}

pclose($handle);

答案 1 :(得分:1)

似乎这可能是PHP内置FTP功能或Expect的工作。

答案 2 :(得分:0)

我认为你不能这样做,但是你可以做的是将第二次执行包装在一个接受多个参数的shell脚本中,或者从STDIN获取文件名的提要。
一般来说,这些都违背了我认为的PHP的心态(这是一个网络请求的生命周期) 您还可以使用现有的php函数或包装器检查您想要执行的操作的哪个部分。