• 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是用我的个人账号在运行。

  • 相关阅读:
    Android的Activity屏幕切换动画(一)-左右滑动切换
    404 Not Found 由来
    HTML+CSS 制作HTML5标志图
    发现 网站错误
    链接指南
    偷懒省事有工具啊
    程序员很穷(转)
    谷歌浏览器修改CSS和js后同步保存到文件中 (译)
    程序员眼睛的保护(爱护眼睛,你我做起)
    仿站违法和侵权吗?
  • 原文地址:https://www.cnblogs.com/galaxyyao/p/3077444.html
Copyright © 2020-2023  润新知