2014-05-12 39 views
0

我刚升级到Ubuntu 14.04和php5.5.9,并且遇到了一些旧代码的问题。包含需要重新加载

这可能是简单的事情,但是让我疯狂!

归结,这里是问题:

  1. 用户提交表单
  2. POST值被用来生成一个php文件,用新定义的变量
  3. 正下方,这在代码中,包含新写入的文件以恢复新变量 - 用于测试目的。
  4. 但只有旧的变量被恢复。
  5. 刷新浏览器页面获取新变量。

我不明白为什么PHP是包括旧文件,而不是新编写的文件。

注意:该文件是由php正确编写的。但是旧文件包含在内,而不是新文件。 如果我点击浏览器刷新,则会显示新值。

变量文件是用php标签写的,因为我很久以前写了它。不知道我是否需要改变它。

filename.php 

<?php 
$yesorno = "no"; 
?> 

samplefile.php 

include "/filepath/filename.php"; 

$opencar = '<'; 
$closecar = '>'; 
$fh = fopen("/filepath/filename.php", 'w') or die("can't open file"); 
fwrite($fh, $opencar."?php\n"); 
fwrite($fh, "\$yesorno = \"yes\";\n"); 
fwrite($fh, "?".$closecar."\n"); 
fclose($fh); 

include "/filepath/filename.php"; 

echo "result: $yesorno"; 

execute samplefile.php 

结果是: “没有”

(刷新浏览器)的结果: “是”

filename.php直接看,它立即正确写入。只是没有正确调用include。

我所做的:

php.ini: 
allow_url_fopen = On 
allow_url_include = On 
restarted apache 

试图完美地老版本的php各种形式的clearstatcache 此代码的工作。

东西明显吗?任何帮助,将不胜感激!

回答

0

您是否安装并启用了apc?如果是这样,你也必须清除它的缓存。拨打apc_clear_cache()或告诉它重新编译更新的文件

apc_compile_file("/filepath/filename.php"); 
+0

APC未安装 –

+0

好吧,我明白了!我使用opcache_invalidate()作为OPcache。你让我走上正轨,谢谢! –

+0

不客气。顺便说一句,这是一个奇怪的方式来存储变量和设置。它很容易出现竞争条件,除非你锁定文件,以便一次只能有一个进程读/写它。 –