php rename(文件)正在制作2份。有时。为什么?

时间:2016-02-03 23:34:25

标签: php

在我的php服务器上我有3个文件夹(包括root)
/
/列表
/列表/存档

我有一个名为/lists/make.php的文件,它使用今天的日期生成一个静态html文件,如下所示:/lists/20160203.htm

但是在它制作今天的列表之前,它首先检查昨天的列表。如果找到,则使用rename()命令将其移动到/ lists / archive文件夹。但是,它不仅仅是移动到存档,它还在root中创建一个副本,但它每隔一天才会执行此操作。它不仅仅是一个偶数/奇数问题,因为它在1月底转换了。例如,现在是我的文件结构。 (注:今天是2016-02-03)

/20160128.htm
/20160130.htm
/20160201.htm
/20160203.htm
/lists/20160203.htm
/lists/archive/20160128.htm
/lists/archive/20160129.htm
/lists/archive/20160130.htm
/lists/archive/20160131.htm
/lists/archive/20160201.htm
/lists/archive/20160202.htm

所以这里发生了三件奇怪的事情,我需要帮忙修理:
(1)昨天的列表应该只在档案中,而不是在根目录中 (2)为什么每隔一天这只是一个问题??? (3)当归档脚本尚未执行时,为什么今天的列表已经在root中? (4)明天的名单会在根目录中吗?

这是/lists/make.php中的相关代码

<?php
$filename = date('Ymd',strtotime('yesterday')).'.htm';
if( file_exists($filename) ){
    //email a copy to admin
    $message = file_get_contents($filename);
    mail($emailAdmin, $subject, $message, $headers));
    //move list to archive
    rename('../lists/'.$filename, '../lists/archives/'.$filename);
}

//start or overwrite today's list
$filename = date('Ymd').'.htm';
$fh = fopen($filename,'w');
fwrite($fh, 'stuff1, stuff2');
fwrite($fh, 'stuff3, stuff4');

?>

如果&#34; ../列出/&#34;重命名()的一部分似乎是多余的,我同意,但补充说,中途解决了我的问题。之前,我只是在重命名($ filename,&#39; archives /&#39;。$ filename),它每天都在制作副本。现在它只是每隔一天复制一次。我很困惑。帮助!

/lists/make.php包含在我网站上的其他几个文件中,因此每天都会执行几次。这是我用来触发备份的黑客解决方案,因为我无法控制共享主机上的chron事件。调用make.php的大多数文件也在/ lists /文件夹中,但其中一个在root中,另一个在/ lists /的子文件夹中深埋2层。我不认为这是相关的,但这个问题对我来说是一个谜。

1 个答案:

答案 0 :(得分:1)

我会使用rename(__DIR__.'/'.$filename, __DIR__.'/archives/'.$filename)__DIR__指的是您使用它的脚本的目录。如果您从多个位置包含脚本,那么/ lists的相对路径将为您提供不同脚本的不同结果。

如果在不同的日子被不同的脚本调用,它可以解释为什么它不一致。今天已经开始运行可能是因为你没有调整时区,而且在你的服务器已经有了明天的时间。