PHP全域緩衝上栽的坑【續】

來源:互聯網
上載者:User

前篇:

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是用我的個人帳號在運行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.