Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
长进程php_Php_Long Running Processes - Fatal编程技术网

长进程php

长进程php,php,long-running-processes,Php,Long Running Processes,我需要运行一个非常长的php脚本(四个半小时,五个小时) 脚本有时会成功运行,但有时会莫名其妙地死掉(可能与共享主机有关??) 我认为运行脚本的解决方案可能是更小的块 为了做到这一点,我编写了一个脚本,将其状态和位置存储在一个xml文件中,并在移动位置之前执行脚本的一块 我在连接脚本的最后一部分时遇到问题,这将结束当前进程并重新执行脚本 或者我完全找错人了 我已经通读了我在某处和其他地方能找到的东西,但我仍然一点也不明白:( 请帮忙 danPHP不是运行长脚本的首选语言。我假设您正在浏览器中运行

我需要运行一个非常长的php脚本(四个半小时,五个小时)

脚本有时会成功运行,但有时会莫名其妙地死掉(可能与共享主机有关??)

我认为运行脚本的解决方案可能是更小的块

为了做到这一点,我编写了一个脚本,将其状态和位置存储在一个xml文件中,并在移动位置之前执行脚本的一块

我在连接脚本的最后一部分时遇到问题,这将结束当前进程并重新执行脚本

或者我完全找错人了

我已经通读了我在某处和其他地方能找到的东西,但我仍然一点也不明白:(

请帮忙


dan

PHP不是运行长脚本的首选语言。我假设您正在浏览器中运行此脚本?尝试通过SSH登录并使用
PHP/path/to/script.PHP
运行脚本


如果这是您可以在本地运行的程序,您可以在本地计算机上安装一个基本的Apache/PHP安装程序,然后运行它。如果您没有shell访问权限,请使用此程序。

如果可能,我会尝试将长时间运行的进程拆分为自己的进程。让您的PHP脚本启动计算,然后寻找可能已完成的线索shed(类似于包含当前计算进度的状态文件),甚至可以使用AJAX技术为用户提供一个漂亮的progressbar;)

如果您可以访问此服务器上的cron,您可以每分钟运行一次脚本来处理下一块数据。

我同意Josh的观点,并建议您尽可能以其他方式将其编程为桌面应用程序。PHP肯定不是为这种需要脚本运行4-5小时的东西而构建的。这可以确保最大执行时间或脚本占用共享主机中的CPU,但我建议使用桌面应用程序或SSH。

考虑到您有一个永远运行但不会导致数据不一致的脚本,您可以使用cronjob

问题是你需要知道你的脚本是否还在运行,因为你可能不想启动它两次。我想到的两个解决方案是脚本的进程id(getmypid())或使用时间戳

对于PID:

  • 脚本启动时保存PID(到/tmp/script\u PID)
  • 每分钟触发一次作业。使用保存PID查找活动进程,如果未找到则启动
您需要访问php的exec()(和friends)和命令行工具,如linux的“ps”

对于时间戳:

  • 保存每次迭代的时间戳
  • 每分钟触发一次作业。如果时间戳早于X,则启动新进程

你必须计算出你自己的X应该是多长。

我假设你已经设置了时间限制(0);已经在代码中的某个地方了?事实上,我最终使用了您、kiguri和Kallelias的解决方案的组合—我制作了脚本,以便在重新调用时它能够恢复停止的位置,并计划每10分钟左右使用一个cron作业来检查它是否仍在运行。哪种语言更好?我可以在本地运行,但我宁愿在远程托管上运行它。C++、C++、java。不是脚本语言。PHP没有什么问题,我自己也在各种文件处理方面滥用过它。但是,如果你大嚼了4个小时,你需要寻找一个替代品。它不仅在运行期间更稳定,而且很可能比原始PHP程序更快。酷-我自学了PHP web应用程序设计,将其扩展到数据处理。。。即使在通过相当复杂的脚本处理36k记录时,它似乎也做得相当好。我来看看那些语言。ruby合适吗?不过,我必须说,我并不急于放弃php的便利性……Ruby也是一种脚本语言。如果您想在synatx中找到类似于PHP的东西,可以看看Java。