Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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_Include_Cron_Exec_Background Process - Fatal编程技术网

让PHP处理在后台进行

让PHP处理在后台进行,php,include,cron,exec,background-process,Php,Include,Cron,Exec,Background Process,我正在开发一个PHP网站,并将其转移到一个新的服务器上。我要移动到的新服务器不具有CRON兼容性。为了弥补这一点,我设计了一个系统,使用时间格式和数据库表等来运行我的代码 我遇到的问题是这段代码: if ($lasttime < $pretime) { $newtime = strtotime("now"); queryMysql("UPDATE time SET time=".$newtime." WHERE time=".$lasttime); includ

我正在开发一个PHP网站,并将其转移到一个新的服务器上。我要移动到的新服务器不具有CRON兼容性。为了弥补这一点,我设计了一个系统,使用时间格式和数据库表等来运行我的代码

我遇到的问题是这段代码:

if ($lasttime < $pretime)
{
    $newtime = strtotime("now");

    queryMysql("UPDATE time SET time=".$newtime." WHERE time=".$lasttime);

    include_once 'grabber/grabber.php';
}
这并没有停止代码,似乎在运行,但实际上并不起作用,如果
grabber/grabber.php
运行正常,那么我会收到一封电子邮件,使用php
mail()
函数进行确认

如果有人能帮我解决这个问题,或者说能给我一些启示,那就太棒了。 谢谢。

(假设您的服务器是*nix)如果您想使用
exec()
,您需要在脚本顶部放置一个指向PHP可执行文件的图标,并授予它执行权限

或者(这可能是更好/更便于携带的方法),改变

…就像你在终端上运行它一样

然而,我怀疑这能否解决问题——我认为答案更有可能是以下几点之一:

  • grabber.php
    中的分析错误。请记住,主要PHP版本之间存在细微的语法差异——如果旧主机/新主机上的PHP版本不同,这可能就是问题所在
  • 由于PHP版本或安装的扩展不同,对在旧主机上定义但在新主机上未定义的函数的调用
  • 在服务器之间移动期间,
    grabber.php
    已损坏

使用
包含一次
,但不要使用
ini\u集('display\u errors',1);错误报告(-1)
以确保您确实看到任何错误。你怎么称呼你的主脚本?您将如何看待这些错误?使用此信息编辑问题,您认为与此相关的
grabber.php
中的任何代码,我将扩展此答案。

这很可能是文件位置或权限的问题。应该有某种错误,或者代码没有停止,但是您没有正确地检查,或者
grabber.php
中的代码本身存在某种问题。添加一些调试行-打印文件名,以便检查路径/名称中的错误;添加
错误报告(E\u ALL);ini设置(“显示错误”,真)
包含_once
行上方的某处;考虑到相对路径等因素,确保文件位于您试图打开它的位置。确保您有权运行此文件

在这种情况下,exec()不是您所需要的,至少在您试图使用它的方式上不是这样


如果没有帮助,请提供更多关于如何运行所显示的脚本的信息,
grabber.php
文件中有什么内容,出现了什么错误等等。

谢谢您的回答,我会给您一个尝试的建议。我知道,
grabber.php
没有问题,就好像我在浏览器中键入了完整的url一样,它运行正常,数据库更新,我收到了确认电子邮件,所以问题只在于
包含
执行
。谢谢,将错误报告添加到它中显示了我有一个重复的功能,当包含到主网站中时,该功能会停止页面运行。我已经解决了这个问题,现在一切都正常运行了。再次谢谢,不客气。记住,将
ini\u设置为('display\u errors',true)
错误报告(E_ALL)或<代码>错误报告(E_全部&~E_通知)或类似的东西几乎是您需要做的第一件事。在开发过程中始终使用此设置是一个好主意,因此,如果发生错误,您可以立即看到它是什么。是的,只是这台新服务器非常不同,它是一种云服务,因此可以执行错误报告,更像其他标准服务器。也许可以尝试完整版本的exec
exec($grabber,$output,$return\u code)
并查看$output返回什么?@charlesbridge使用
exec
意味着代码运行时不会导致加载速度变慢?同样,在使用“完整版本”的情况下,我将在
$output
$return\u code
中输入什么?您应该看到手册页(),$output和$return\u code是空变量,在完成后由exec填写。这里还有一些示例代码可以帮助您。
if ($lasttime < $pretime)
{
    $newtime = strtotime("now");

    queryMysql("UPDATE time SET time=".$newtime." WHERE time=".$lasttime);

    $grabber = $base."grabber/grabber.php";    

    exec($grabber);
}
$grabber = $base."grabber/grabber.php";    
exec($grabber);
$grabber = "php ".$base."grabber/grabber.php";    
exec($grabber);