【问题标题】:Using Kohana in File outside Kohana在 Kohana 之外的 File 中使用 Kohana
【发布时间】:2023-03-07 10:20:01
【问题描述】:

情况如下:

我的域电子邮件(所以 *@domain.com)上有一个包罗万象的重定向到位于 /home/domain/scripts/piper.php 的管道脚本。这个 piper 脚本不在 Kohana ORM 中,但我所有的其他文件都在。我想尝试在这个 piper.php 文件中使用 Kohana。

我已尝试(未成功)以下所有方法:

包括小花

我不知道需要包含什么,更重要的是如何覆盖 Kohana 用来确定正确控制器的 url 变量。此外,这是一个包罗万象的 piper,所以它不使用 HTTP(据我所知),而是执行命令。

管道

我尝试了以下管道:

/home/domain/public_html/index.php --uri="piper"

但是 cPanel 使这成为不可能,因为您只能指定目标脚本,而不能指定正确的标志等(除非我遗漏了什么)。

PHP exec()

我尝试使用以下行:

exec("php /home/domain/public_html/index.php --uri=\"/piper\"")

我希望通过 exec() 命令维护标准输入数据,但我无法让它识别 uri 命令,尽管我可以在本地主机上运行它并且它工作得很好。

我使用http://www.coderelic.com/2011/10/creating-cron-jobs-in-kohana-3-x-is-a-piece-of-cake/ 作为参考,但什么都做不了。

我对其中任何一种解决方案都很满意,这样我就可以查看收到的电子邮件,对其进行解析,然后根据参数发送电子邮件。

如果您需要更多信息,请告诉我!我被难住了。

【问题讨论】:

  • 在你的 php exec 中确保包含 php 的完整路径。如果您不知道,请转到命令行并键入“which php”。我在 cron 工作中使用了类似的东西。示例:/usr/bin/php /path/to/kohana/index.php --uri="/apn/index?task=fetch"

标签: php kohana


【解决方案1】:

/home/domain/public_html/index.php --uri="piper" 将是一种有效的方法。如果您的主机很糟糕并且不允许您指定,请将其放入 bash 脚本中并引用它。

如果您使用的是任何最新版本的 kohana(3.2 或 3.3),更好的方法是使用 Minion 运行命令行任务。这就是 Minion 的设计目的。

【讨论】:

  • 我尝试创建一个 shell 脚本,但似乎 --uri 标志没有粘贴。我不知道为什么,但除非我在 shell 中输入命令,否则该标志不会粘住。因此使用exec() 调用它或使用shell_exec() 调用shell 脚本也不起作用。
【解决方案2】:

您需要做的就是:

  1. 将您的piper.php 脚本修改为有效的PHP 类;
  2. 将其放在/application/classes/文件夹中;

Kohana 将在初始化期间自动加载您的类文件(如 include)。

然后你可以像往常一样使用你的piper课程$piper = new Piper; ...

UPD

您必须通过 Kohana 发送电子邮件。

创建控制器,例如pipe(使用/pipe URL 路由):

public function action_pipe() {

    $pipe = new Pipe; // This creates new Pipe object (your emails serving class)

    $pipe->serve(); // Sserve emails within `serve()` method of Pipe class

}

【讨论】:

  • 电子邮件通过管道传送到 外部 Kohana 的脚本。这意味着我需要以某种方式初始化 Kohana。如果我让我的 piper 成为一个类(我有一个名为 piper 的控制器,顺便说一句),那么我不能简单地包含它。
  • 我想我明白你在说什么,但这需要我将我的电子邮件(当它们进来时)传送到一个 url (domain.com/pipe),对吗?我不确定如何在 cPanel 中执行此操作。
【解决方案3】:

虽然不可否认,我不确定这些其他答案是否正确,因为我无法弄清楚如何重现结果。

最终解决我的情况的是创建一个在/home/domain/scripts/piper.php 中调用的Controller_Piper 类。我所做的是从/home/domain/public_html/index.php 复制代码并更改以下内容:

echo Request::factory("/piper")
->execute()
->send_headers(TRUE)
->body();

这会加载piper 控制器并很好地执行所有操作。不确定它是否是最干净的,但它确实有效。

【讨论】:

  • 考虑到您似乎拥有糟糕的托管服务,这似乎是一个很好的解决方案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2011-09-04
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多