2014-11-05 78 views
2

我正在嘗試爲我們的網站之一編寫升級腳本。目前,該腳本將解壓縮從升級鏈接提供的文件並解壓縮到目錄。PHP文件重命名本身

我的問題是,如果有一個自己的新版本,即upgrader-new.php我需要的腳本來運行到完成,然後刪除自身,然後讓upgrader-new.php被重命名爲upgrader.php

我能想到的唯一的解決辦法是創建第三個文件,即upgrade-assist.php將任何升級之前運行,以檢查是否存在upgrader-new.php如果確實如此,刪除原始和新的重命名爲適當的名稱。我預見到問題,因爲原始腳本仍然需要撥打upgrader-assist.php,據我所知,您不能刪除正在運行的腳本?

有什麼建議嗎?

謝謝!

+0

考慮一個更強大的系統。 Laravel的數據庫遷移是單獨的文件,其文件名中含有日期,因此係統知道應用它們的順序。允許事物的版本和明顯。 – ceejayoz 2014-11-05 23:07:22

回答

4

據我所知你不能刪除正在運行的腳本?

你可以試試這個:

<?php unlink(__FILE__); 

這是完全正常的,除非有使用此文件的其他進程(當然,運行過程中有足夠的權限這樣做)。

文件不是逐行處理和執行的,而是加載到內存中,以便您可以自由重命名或刪除它,它仍然會運行直到結束(或致命錯誤)。

+0

不,你不能... – baao 2014-11-05 23:06:48

+0

我很欣賞答案!關於在原始文件被刪除後重命名新腳本的建議? – acupajoe 2014-11-05 23:06:59

+1

是的,你可以! http://stackoverflow.com/questions/5242469/php-self-delete-file-is-it-possible你只需要運行新的PHP腳本(重命名一個),並優雅地退出舊的。 – 2014-11-05 23:08:08