我正在構建一個測試工具來執行舊版PHP代碼的目錄,它是極端難以進行單元測試,雖然我正在使用PHPUnit這個工具。PHP「Uninclude」或從內存中刪除?
有關PHPUnit的一件很酷的事情是,它會將PHP通知,警告和錯誤引發異常。使用這一點知識,我已經構建了一個工具,以遞歸方式從try/catch塊中的目錄中獲取include()
文件並記錄任何異常。
問題是,如果我包含數百個文件,這可能會很快變成內存耗盡和崩潰。我已經使用這個考慮,但我不知道這是否從內存中「清除」它:
// Include file into buffer
ob_start();
include($file);
// Clear file from buffer
ob_clean();
什麼是處理這種性質的東西,並適當地管理內存/資源的最佳方法是什麼?
[編輯]
此外,這是一個內部的工具,我發展,以幫助管理包含不可測(在時間約束感)遺留程序代碼文件的數千人。
這是怎麼回事?
// Enable garbage collector (in case this helps?)
gc_enable();
// Get procedural php and execute it
$fileData = file_get_contents($file);
eval($fileData);
// Clear variable
$fileData = null;
那麼,你的輸出緩衝區與你的應用程序完全沒有關係。這只是用於將數據發送回發送到瀏覽器的Web服務器。你需要另一種方法,我懷疑它會降到沙盒。 http://php.net/manual/en/runkit.sandbox.php – Brad 2012-08-03 14:14:53
你不能「uninclude」。您可以嘗試取消設置變量,但函數和對象不能被「刪除」。 – 2012-08-03 14:15:18
您可以在包含之前和之後區分'$ GLOBALS',然後一旦完成了該文件,就可以取消設置diff'd變量。 – 2012-08-03 14:15:21