【发布时间】:2013-10-31 01:54:37
【问题描述】:
我计划在 phar 存档中创建一堆 PHP 脚本(以便于部署)并允许它从已知存储库自我更新。
在实时网站上的 phar 存档应该如何自我更新?不更新它的内容,而只是替换它自己(从之前下载的new.phar 到/tmp 或其他东西)就足够了。
我特别担心在 PHP 中“替换我自己”的缺陷,同时考虑到请求可能正在进行(脚本将主要通过 AJAX 从 Web 调用)。
【问题讨论】:
-
我不知道是否有任何特定于 phar 的东西会使事情复杂化,但我会首先通过添加 --version 或一些此类参数并调用它来验证新的 phar 作品.然后,将当前文件移动到新位置,将新文件移入,删除旧文件。
-
@OddEssay 我实际上忘了提及,但我主要担心的是网络请求,而不是通过命令行调用 phat。我之所以将其设为 phar 只是因为它非常优雅,但是当对实时服务器的请求可能正在进行时,我必须更换它。理想情况下,如果 PHP 将旧 phar 的内存副本用于在副本之前启动的请求,我会喜欢它,但我不知道它是否这样做。
-
一般来说,对于普通的 PHP Web 请求,一切都是编译然后从内存中运行的,因此如果您更改源文件,即使旧文件中的进程仍在运行,它也只会影响新请求。 - 此外,使用移动而不是复制意味着传输时间将最短。
-
也就是说,如果您正在创建一些模块化的东西并希望以托管方式进行更新,那么您真的应该考虑使用 composer 并将其部署为一个模块 :o)
-
@OddEssay 从来没有看过作曲家。它不需要作曲家出现在服务器中吗?理想情况下,我想告诉我的脚本用户只需将 .phar 文件放在那里,然后在浏览器中转到其 URL 进行配置。另外,您所说的预编译对于 .php 文件是有意义的,但是 .phar 文件是否也以这种方式进行了预编译?