PHP代码文件通过shell运行

时间:2012-08-01 16:36:33

标签: php shell

我有非常繁重的PHP代码文件,可以在200,000条记录上创建PDF。 PDF页面总数将达到150,000。我尝试通过浏览器运行我的代码,但它无法做到这一点。我想我必须通过shell运行它 - 或者任何人都可以建议其他方法吗?

2 个答案:

答案 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)

一些可能对评论来说太大的想法:

  • 您需要考虑缩小此PDF的大小 - 150,000页对于PDF来说太大了。将其拆分为多个报告
  • 这应该在专用服务器的后台创建。你如何做到这一点,以及频率,取决于运行所需的时间以及你需要数据的新鲜程度
  • 您可以使用cron,如前所述,或者像RabbitMQ或Gearman这样的排队系统 - 都可以从PHP访问。然而,正确的队列系统确实带来了比简单的预定脚本更陡峭的学习曲线。
  • 你应该愿意对这个问题做一些研究。您的回复请详细说明任何人都有解决方案建议您相信将在此处为您编写完整的代码解决方案 - 这不是StackOverflow的工作方式。只有你了解你的情况的全部细节,你需要从这里的各个人那里获取指导,并将它们与额外的研究一起应用,以获得有效的解决方案。