通过命令行执行使用ZendGuard编码的PHP脚本

时间:2014-04-10 17:18:10

标签: php apache zend-guard

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

更多详情

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我要在这里做出假设。当你们将脚本从命令行移动时,你并没有真正重写脚本。您只需在文件上执行 php -f ,而不是在网址上执行 wget

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

只是一个猜测。

编辑:当您通过网址访问时,只需阅读您说它可以工作的部分。几乎肯定是$ _POST或类似的东西。

答案 1 :(得分: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,{{1}等等,反之亦然。