【问题标题】:Replacing one line of code due to php 7 with a (shell) script用(shell)脚本替换由于php 7而导致的一行代码
【发布时间】:2016-09-12 23:05:28
【问题描述】:

所以 PHP 7.0 出现了一些问题。最值得注意的是 w3 totalcaching 现在导致了一个错误,该错误正在向我的 httpd 错误日志发送垃圾邮件。

Tue May 17 04:11:50.865647 2016] [proxy_fcgi:error] [pid 2554:tid 139695893694208] [client 195.154.181.168:59106] AH01071: Got error 'PHP message: PHP Warning:  Parameter 1 to W3_Plugin_TotalCache::ob_callback() expected to be a reference, value given in /home/x/domains/x/public_html/wp-includes/functions.php on line 3464\n', referer: http://www.googlebot.com/bot.html

修复相当简单https://github.com/gadelkareem/wp-w3-total-cache/commit/e71030e89f4cd666742ae2ec39451782beb42f3a,但我必须为大约 12 个站点执行此操作。并且可能在插件更新时再次出现。

文件总是在这里(* 是变量用户和域相关的文件夹):

/home/*/domains/*/public_html/wp-content/plugins/w3-total-cache/lib/W3/Plugin/TotalCache.php 

有什么方法可以安全地编写这个脚本吗?

【问题讨论】:

    标签: php apache sh centos6 php-7


    【解决方案1】:

    在github上,用户pratham2003有same problem as you and propose下面的sed命令来应用补丁:

    sed -i.bak 's/function ob_callback(&/function ob_callback(/g' /path/to/public_html/wp-content/plugins/w3-total-cache/lib/W3/Plugin/TotalCache.php
    

    -i.bak 选项可以跳过以防止创建备份文件。

    然后您可以在本地应用补丁并编写一个脚本来更新您的每台服务器上的文件或每台服务器上的 ssh 并在每台服务器上应用 sed 命令。

    您还可以维护一个分叉插件并从此插件安装。

    但最好是上游维护者自己修改。

    【讨论】:

    • "sed 是一个流编辑器。流编辑器用于对输入流(文件或来自管道的输入)执行基本的文本转换。虽然在某些方面类似于编辑器允许脚本编辑(例如 ed),sed 通过只对输入进行一次传递来工作,因此效率更高。但它是 sed 在管道中过滤文本的能力,这与其他类型的编辑器特别不同. " 对不起,我不熟悉 sed。这是我必须在我的服务器上永久运行的东西,还是一次性运行的解决方案?
    • sed 是一个命令行工具,可在 linux、Mac OS X 等 unix 系统上使用...如果您在本地应用修改,则需要在本地计算机上安装 sed。如果要直接在服务器上应用修改,则需要在所有服务器上安装 sed。
    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多