我正在構建一個產品實例使用主框架文件的框架,直到它有自己版本的該文件的副本。要做到這一點我也做了以下內容:PHP包括路徑順序和狀態緩存
set_include_path(MY_PRODUCT_ROOT.'/' . PATH_SEPARATOR . MY_FRAMEWORK_ROOT.'/');
所以,如果我把它include('view-users.php');
將首先在MY_PRODUCT_ROOT尋找/view-users.php如果這沒有找到,它會隨即看向MY_FRAMEWORK_ROOT /視圖用戶.PHP。
此過程運行良好,直到我將文件添加到產品根目錄。我知道PHP/Apache正在緩存內容,並且有人會認爲運行clearstatcache(true);
來清除任何狀態緩存。 PHP可能在其include()中使用file_exists;並認爲新文件仍然不存在。我試過重啓Apache沒有任何效果。
不幸的是,運行clearstatcache(true);
也沒有幫助。只有一次我刪除了MY_FRAMEWORK_ROOT /文件它認爲清除緩存並再次嘗試,因此找到MY_PRODUCT_ROOT /文件。
林有點難倒了,我知道我們需要刷新的文件(S)是否存在不PHP/Apache的理解,但clearstatcache(true);
沒有幫助...
任何想法?
UPDATE:更正,重新啓動Apache現在似乎有所幫助。我重申,當試圖將文件添加到MY_PRODUCT_ROOT,重疊現有MY_FRAMEWORK_ROOT文件,定製
UPDATE纔會出現這種情況:開發環境是Windows Zend服務器CE PHP 5.3.14,生產環境的Centos的Linux的httpd ,PHP 5.3+。在我的開發環境中啓用Zend優化器的事實可能會產生影響,也不會使用APC或任何其他緩存腳本
更準確地說,重新啓動apache只在調用clearstatcache時才起作用。我實際上必須刪除框架文件,然後重新加載頁面,並將框架文件放回 – Prof83
您是否啓用了apc緩存? (或另一個optcode緩存) –
我也無法重現你的問題在php-5.3.3和apache 2.2.16上。你能否提供更多關於你的環境的信息? – Lars