2014-11-05 79 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