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

使用PHP保持shell打开以允许多个调用?,php,unix,shell,Php,Unix,Shell,如何允许shell会话保持打开状态,直到用PHP关闭它 在我的示例中,我想使用NcFtp通过shell命令发布一些文件。我想离开PHP的内置FTP,因为它要慢得多,性能是个问题 使用ncftpput发布文件或目录很容易。但是如果我想循环遍历一个包含10个文件的数组,脚本必须登录、发布、注销、登录、发布、注销 如果像这样的东西能起作用,那就方便多了 shell_exec('ncftp -u username -p password'); foreach ( $files as $file ) {

如何允许shell会话保持打开状态,直到用PHP关闭它

在我的示例中,我想使用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');
可能吗


谢谢大家!

我不认为您可以这样做,但是您可以将第二次执行包装在一个shell脚本中,该脚本将接受多个参数,或者从STDIN获取文件名提要。
一般来说,我认为这些都与php的心态相反(这是web请求的生命周期)。

您还可以检查您想用现有的php函数或包装器完成的工作的哪一部分。

如果您只需要访问一个进程,您可能会使用或执行此操作

类似的方法可能会奏效:

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

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

pclose($handle);

看起来这可能是PHP内置功能的一项工作,也可能是一项工作

看看expect:您不能在ncftp中嵌套命令,对吗?比如:ncftp-u username-p password&&put…&&放…我已经用PHP的内置FTP构建了一个工作实现,但是它比通过shell执行运行NcFtp慢得多。出于好奇,哪一部分比较昂贵?连接?您需要连接到多个主机吗?转帐真的慢吗?