php - 当文件包含更多次时出现“无法重新声明”的问题 - 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 秒并重复比较。
解决方案
更改您的 cron 作业,使其在test.php
之后运行A.php
,但前提A.php
是成功。
*/2 * * * * php A.php && php test.php
A.php
如果不成功,应该以非零代码退出;它可以做到这一点
die(1);
如果您想要额外的检查,test.php
可以将文件的时间戳保存在另一个文件中。当它启动时,它可以读取该文件以获取以前的时间戳,并将当前时间戳与其进行比较。如果它们没有更改,则不会发送通知。
推荐阅读
- java - 为什么当 Comparator.compare 相等时我们需要返回 0
- node.js - 使用 DataDog 的舵图集成 DataDog GKE NESTJS
- c++ - 错误:运算符 [] 不匹配。在将 int 与列表中的 int 进行比较时
, - python - 要设置的 Python 排序列表
- bash - 从调用的 make 目标获取错误状态
- amazon-s3 - 如何使用用户上传的文件更新 .RDS 文件并将其存储在 Shiny(服务器)中以备下次使用?
- mongodb - Elasticsearch,MongoDb,Mongoosastic 查询对象数组
- oracle - 我无法在 oracle 11 g 中添加地理类型的列
- tensorflow - 无法使用 get_tensor_by_name 恢复 Dropout
- node.js - API Gateway 随机切换响应从 403 到 404