zoukankan      html  css  js  c++  java
  • PHP全局缓存上栽的坑【续】

    前篇:

    http://www.cnblogs.com/galaxyyao/archive/2013/05/07/3065237.html

    在和同事交流后发现,我自己把问题给偷换了,结果导致把自己框起来了。
    原本我打算解决的问题是:
    用户的插件目录可能没有写权限,无法更新插件
    而不是:
    不使用文件读写的形式来缓存数据

    因此完全可以在读取完数据库后,将数据临时存在一个插件拥有读写权限的目录,例如临时文件夹。

    于是按这个思路写出了示例代码:

    $tempFolderPath = sys_get_temp_dir();
    $handle;
    mkdir($tempFolderPath, 0777, TRUE);
    $tempFileName = $tempFolderPath . '\kancartplugin.txt';
    if (file_exists($tempFileName)) {
        $totalCode = file_get_contents($tempFileName);
        $totalCode= str_replace("$", "\$", $totalCode);
        eval($totalCode);
    } else {
    $handle = fopen($tempFileName, "x+");
    $totalCode="";
    //接下来从数据库读取代码拼成$totalCode。需要注意读完一行数据后添加一个\n,不然可能会和注释连载一起。比如//end和class连在一起
    fwrite($handle, $totalCode);
    }

    发现一个比较奇妙的现象是,我的测试程序会把临时文件存储到C:\Windows\Temp,但实际程序会存到C:\Users\用户名\AppData\Local\Temp,明明是一样的代码。。。大概和环境变量的设置有关吧,等以后有时间再去好好研究。

    更新:发现问题根源了:测试程序是跑在IIS下,而实际代码是跑在Nginx下。对于IIS,临时文件夹是C:\Windows\Temp,对于Nginx,临时文件夹是C:\Users\用户名\AppData\Local\Temp。如果要进一步深究原因的话,应该是IIS是用系统账号在运行的,而Nginx是用我的个人账号在运行。

  • 相关阅读:
    信息探测
    Hdu 1262 寻找素数对
    Hdu 1263 水果
    Hdu 1261字串数
    Hdu 1253 胜利大逃亡
    Hdu 1237简单计算器
    Hdu 1235 统计同成绩学生人数
    Hdu 1236 排名
    Hdu 1233 还是畅通工程
    Hdu 1234 开门人和关门人
  • 原文地址:https://www.cnblogs.com/galaxyyao/p/3077444.html
Copyright © 2011-2022 走看看