2012-11-06 32 views
1

这里以外的情况:在文件中使用的Kohana Kohana的

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

我已经试过(不成功)以下所有:

包括Kohana的

我想不出有什么需要纳入,更重要的是如何重写URL变量的Kohana用于确定正确的控制器。此外,这是一个全面的吹笛者,所以它不使用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/作为参考,但无法获得任何工作。

我很满意这些解决方案中的任何一种,以便我可以看到收到的电子邮件,解析它,然后根据参数发送电子邮件。

让我知道你是否需要更多信息!我被困住了。

+0

在你的php exec上一定要包含php的完整路径。如果你不知道它,请转到命令行并输入“which php”。我在cron工作中使用了类似的东西。例如:/ usr/bin/php /path/to/kohana/index.php --uri =“/ apn/index?task = fetch” – pogeybait

回答

0

所有你需要做的是:

  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 

} 
+0

电子邮件被传送到_outside_ Kohana脚本。这意味着我需要以某种方式初始化Kohana。如果我让我的吹笛者上课(我有一个叫吹笛者的控制器,顺便说一下),那么我不能简单地将它包括进去。 – Ryan

+0

查看更新的答案。 –

+0

我想我明白你在说什么,但这需要我将我的电子邮件(当他们进来时)传递给一个url(domain.com/pipe),对不对?我不知道如何在cPanel中做到这一点。 – Ryan

0

/home/domain/public_html/index.php --uri="piper"是做一个有效的途径。如果您的主机很糟糕,并且不让您指定,请将其放入bash脚本中并引用该脚本。

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

+0

我试着创建一个shell脚本,但似乎'--uri'标志不会粘住。我不知道为什么,但除非我在shell中输入命令,否则该标志不会粘住。因此,使用'exec()'调用它或使用'shell_exec()'调用shell脚本也不起作用。 – Ryan

0

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

最后为我的情况工作的是创建Controller_Piper类,在/home/domain/scripts/piper.php中调用。我所做的就是将代码从/home/domain/public_html/index.php复制,改变了以下内容:

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

这将加载piper控制器和非常漂亮执行的一切。不确定它是否最干净,但确实有效。

+0

这似乎是一个很好的解决方案考虑到你似乎有不好的托管:) – zombor