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