在LAMP框中,我通过PHP的exec函数在循环中调用SCP复制功能,将多个图像复制到远程服务器:
exec("scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true));
结果:工作正常,但PHP脚本需要几秒钟才能完成。
但是我不希望PHP脚本等待SCP工作完成,所以我尝试了以下一项:
exec("nohup scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " 1>/dev/null/ 2>&1 &");
结果:PHP脚本速度更快,但SCP没有完成。图像不会复制到远程服务器。
exec("nohup scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " &");
结果:图像被复制,但是php脚本的运行时间没有任何改善,所以我猜php脚本仍然等待SCP例程完成,尽管我“背景”了这个电话。
任何想法如何实现它,PHP脚本不等待,但SCP过程完成了?
提前谢谢!
答案 0 :(得分:0)
超过与服务器的最大同时连接可能是问题。因此限制同时连接或只是逐个上传。如果在浏览器出现问题之前等待,可以将以下内容添加到php脚本
ignore_user_abort(true);
set_time_limit(0);
并使用循环以下
上传exec("scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " 1>/dev/null/ 2>&1");
从您的浏览器触发php脚本后,您甚至可以关闭浏览器,上面的代码将为您带来魔力。