我有非常繁重的PHP代码文件,可以在200,000条记录上创建PDF。 PDF页面总数将达到150,000。我尝试通过浏览器运行我的代码,但它无法做到这一点。我想我必须通过shell运行它 - 或者任何人都可以建议其他方法吗?
答案 0 :(得分:4)
如果您希望PHP脚本将其调用到shell中,那么:
exec("php path/to/script.php&");
否则,只是在终端引号中做什么。
另外,检查你的php.ini文件,它可能会在一段时间后设置为超时。那可能是你的问题。如果是这种情况,您最好将其交给用C或C ++等低级语言编写的程序,然后再将其交给PHP。您还可以将时间值增加到更高的值,但如果时间过长,可能会使服务器陷入困境。
如果您想在浏览器中查看完成后的内容。确保您可以获取该进程的pid,然后创建一个脚本以查看该进程的状态。完成后,让AJAX将其加载到当前帧中。
这样的事情:
$pid = exec("nohup $command > /dev/null 2>&1 & echo $!");
其中命令就是你想要做的。
然后有些jquery喜欢:
<script>
$(document).ready(function()
{
checkStatus();
});
function checkSatus()
{
$.get("/path/to/checkStatus.php,{pid: <?php echo $pid;?>},function(){
if(data.running == 1) alert("PDFS done");
window.setTimeOut(checkStatus,30000);
}
</script>
然后是另一个checkStatus.php文件:
<?php
$pid = $_GET["pid"];
$isRunning = file_exists( "/proc/$pid" );
if($isRunning){
json_encode(Array("running"=>1));
}
else
{
json_encode(Array("running"=>0));
}
*代码无法保证。它很快被放在了一起。
答案 1 :(得分:0)
一些可能对评论来说太大的想法:
cron
,如前所述,或者像RabbitMQ或Gearman这样的排队系统 - 都可以从PHP访问。然而,正确的队列系统确实带来了比简单的预定脚本更陡峭的学习曲线。