PHP 7.1"要求/包括"结果不是最新的

时间:2018-03-28 10:36:21

标签: php

我有一个包含以下内容的文件:

<?php
    return '2000-01-01 00:00:00';
?>

我有这段代码:

<?php

    $oldValue = require 'file.php';
    $now = new DateTime();
    $handle = fopen('file.php', "w");
    fputs($handle, "<?php\nreturn '" . $now->format('Y-m-d H:i:s') . "';");
    fclose($handle);
    $newValue = require 'file.php';

    echo "Old value: $oldValue ";
    echo "New value: $newValue ";
?>

PHP 5.3的输出是:

Old value: 2000-01-01 00:00:00 New value: 2018-03-28 10:33:12

PHP 7.1的输出是:

Old value: 2000-01-01 00:00:00 New value: 2000-01-01 00:00:00

在这两种情况下,文件中的字符串会发生变化。

有人可以帮我用PHP 7.1更新新值吗?

注意:这不是真正的问题。它只是一个问题的抽象,使事情变得更简单和易于理解。所以,请没有PHP best practices的教训。我只想对我的问题做出很好的回应。

谢谢:)

2 个答案:

答案 0 :(得分:4)

作为commented by iainn问题是,PHP服务器在加载文件后缓存文件,而不是在第二次要求时从光盘重新调用文件,而是从它的内存缓存中调用它。

正如你所说:

  

&#34;文件内容发生变化&#34;

然后问题是 new 内容没有传递给脚本,而是使用旧内容的内存

因此请调用clearstatcache()强制清除缓存的文件数据。这应该在写入新数据以更新文件之后,以及在第二次调用文件之前放置。

如果这不起作用,那么文件数据可能会缓存在其路径的其他位置。

<?php

    $oldValue = require 'file.php';
    $now = new DateTime();
    $handle = fopen('file.php', "w");
    fputs($handle, "<?php\nreturn '" . $now->format('Y-m-d H:i:s') . "';");
    fclose($handle);
    clearstatcache();           // THIS line should help you 
    $newValue = require 'file.php';

    echo "Old value: $oldValue ";
    echo "New value: $newValue ";
?>

答案 1 :(得分:-1)

你的文件被缓存(OPcache)和php在两个需要的调用中返回相同的文件可能是一个问题

您可以尝试修改opcache settings

opcache.enable = 0

然后进行测试?还有

opcache_reset() 

可以帮到你,但如果你从CLI运行你的代码,它可能无法正常工作。