7

我需要从命令行(PHP CLI)运行一些由 Zend Guard 加密的文件,而 php 似乎在到达编码文件时立即退出而没有任何错误消息。是否可以从命令行执行 Zend Guard 编码的 PHP 脚本?

更多细节

在我目前正在处理的应用程序中,一些任务需要定期运行。起初,我们为一些仅用于运行任务的 url 实现了控制器。wget然后我们会在这些页面上使用 cron 任务。问题是其中一些任务需要参数才能运行。使用wgetPOST 请求不起作用,因为 Zend Guard 所做的第一件事是分配一个 cookie,然后重定向到相同的 URL。在第二个请求中,因为它现在在 GET 中,所以所有参数都丢失了。

然后我们决定使用命令行脚本来纠正问题。我们非常喜欢这种方法,因为它解决了我们在使用基于 URL 的方法时遇到的问题。首先,它不会长时间保持打开的 Apache 连接。此外,它不会在公共 URL 上公开一些内部逻辑。正如我之前所说,当我们尝试执行这些命令行脚本时,什么也没有发生,应用程序只是退出了。

我们使用的是 Ubuntu 12.04 LTS、PHP 5.4.25 和 Apache 2.2.22。我确保在命令行中正确加载了 Zend Guard 扩展。此外,当网页由网络浏览器访问时,它也能正常工作。

如果有人可以帮助我解决这个问题,将不胜感激。谢谢!

4

2 回答 2

2

我在这里做一个假设。当你们将脚本移动到从命令行运行时,实际上并没有重新编写脚本。您只需对文件执行php -f而不是对 URL执行wget即可。

如果是这种情况,您可能在脚本中有一些逻辑需要身份验证或 Web 服务器逻辑,如果未找到参数,则带有退出/死亡。您提到某些脚本需要 POST 才能运行,所以我的猜测是那里有一个$_POST显然不能在命令行上运行。

不过只是猜测。

编辑:当您通过 URL 访问时,只需阅读您所说的有效部分。几乎肯定是 $_POST 或类似的东西。

于 2014-04-17T13:59:56.423 回答
0

您应该将要从php脚本中的命令行运行的任何逻辑包装在类似的东西中

$cli = isset($_ENV['SSH_CLIENT']);
if($cli) {
  // Code to run from command line here

} else {
  // Code for the Web here


}

这将允许您从 Web 和命令行运行相同的文件。如前所述tazer84——确保在 CLI 模式下,您不包含仅 Web 逻辑(例如header('location: ...');$_COOKIE$_POST等),反之亦然。

于 2014-04-20T04:03:32.740 回答