我正在通过curl(大约43MB)在PHP上下载一个大XML文件,然后处理该文件,验证数据并将其插入到数据库中。问题在于负载均衡器在5分钟后停止向用户发送响应,并且PHP脚本大约需要20分钟。 我想过并行运行两个PHP脚本。一个在服务器上创建一个空文件,下载并处理xml文件,最后删除空文件。另一个PHP脚本每15秒运行一次并检查空文件是否仍然存在。 我在并行运行这两个脚本时遇到了麻烦。这是我的代码:Php上的异步方法
$(document).ready(function() {
$(document).on("click", ".clickMe", function() {
var download = $.ajax({
async: true,
url: "/staff/import.php",
type: "post",
data: { getFile: true },
dataType: "json",
success: function (data) {
}
});
var serverStatus = true;
while (serverStatus === true) {
var checkDownload = $.ajax({
async: false,
url: "/staff/checkDownload.php",
type: "post",
dataType: "json",
data: { checkDownload: true },
success: function (returndata) {
if (returndata === false) {
serverStatus = false;
}
}
});
}
});
});
PHP卷曲下载:
<?php
session_write_close();
touch(getcwd() . "downloading");
$curl = curl_init(); //
$post = array("uploadfile"=>"@" . getcwd() . "/tmp.xml");
curl_setopt($curl, CURLOPT_URL, "sftp://<host>/bigFile.xml");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($curl, CURLOPT_USERPWD, "<userName>:<password>");
file_put_contents(getcwd() . "/tmp.xml", curl_exec($curl));
curl_close($curl);
unlink(getcwd() . "downloading");
// process xml file
// insert into database
PHP检查下载:
为了使并行运行,我读了我需要禁用会议上,两个PHP脚本[session_write_close();]
但还是一个等到另一个完成。如果我在我的代码(Javascript或PHP)上做错了什么或者知道有其他方法来做到这一点,任何人都可以给我任何提示? 感谢
我认为这取决于服务器而不是php如何执行。据我所知,Apache会一一执行此操作 - 如果我错了,请纠正我的错误......您的更大的脚本会因此“阻止”您的执行堆栈 – 2014-11-14 12:27:51
如何在服务器的后台运行作业并拥有表单“队列”系统(甚至可能有进展?)。然后简单地发回一个“queueID”,当队列项目完成时(每隔N秒检查一次ajax),返回文件。 – h2ooooooo 2014-11-14 13:28:38
这也是我的问题。我写了一个更长的答案。你认为有什么可以改善@ h2ooooooo,我只是写了什么来到我的脑海里... – baao 2014-11-14 13:33:16