首页 > 解决方案 > 当文件包含更多次时出现“无法重新声明”的问题 - PHP

问题描述

我试图多次运行同一个文件(一次又一次......)但我有这个问题Cannot redeclare function

这是我在文件中的代码test.php

$word= hello();
print_r($word);

include('test.php');    


function hello(){
    $x= "ok";
    return $x;
}

当函数打印单词时,我想再次运行同一个文件,include 问题是Cannot redeclare hello()

细节

要再次运行同一个文件,我可以cronjob对其他文件使用类似操作,但在这个项目中,我不知道何时再次运行该文件。我必须等待里面的代码执行test.php。执行时间是可变的,因此我无法设置 cronjob 何时每 1 分钟或 2 分钟运行一次文件。

编辑:解释更多

我有一个名为“A.php”的文件,其中每两分钟创建两个包含两个不同数组的其他文件(为简单起见,我们将其称为 array1.php 和 array2.php)。

每两分钟一个 cron 作业执行“A. php”,其中的代码会破坏并创建两个新的数组文件。

在我的新项目(“test.php”)中,我使用这两个文件的数组向我的电报发送通知。只有在这 2 个数组中有新内容时才会发送通知。

如果我对“test.php”使用 cronjob,我可能会遇到问题:如果“A.php”由于某种原因未能更新两个数组,“test.php”会发送两次相同的通知。

出于这个原因,我想在文件末尾运行“test.php”:在 test.php 的开头推断两个数组的 filemtime(),并在“test.php”的末尾再次提取 filemtime ( ) 的两个数组。如果两个文件已更新(它们具有不同的时间戳),我会再次包含“test.php”,否则我会休眠 10 秒并重复比较。

标签: phploopscronredeclare

解决方案


更改您的 cron 作业,使其在test.php之后运行A.php,但前提A.php是成功。

*/2 * * * * php A.php && php test.php

A.php如果不成功,应该以非零代码退出;它可以做到这一点

die(1);

如果您想要额外的检查,test.php可以将文件的时间戳保存在另一个文件中。当它启动时,它可以读取该文件以获取以前的时间戳,并将当前时间戳与其进行比较。如果它们没有更改,则不会发送通知。


推荐阅读