CodeIgniter:如果控制器在文件夹中,则从命令行运行脚本?

时间:2012-02-14 11:46:52

标签: php codeigniter command-line-interface codeigniter-2

如上所述: http://codeigniter.com/user_guide/general/cli.html

像这样的页面: http://www.example.com/myController/myFunc/myParam

可以在命令行上运行:

php index.php myController myFunc myParam

我的codeignitor设置有一些文件夹来分组控制器,让我们这样说:

myFolder -> myPageController
         -> myAdminController

所以,网址变为:

http://www.example.com/myFolder/myController/myFunc/myParam

如何在CLI上调用相同的东西? 类似的东西:

php index.php "myFolder/myController" myFunc myParam

似乎不起作用。

4 个答案:

答案 0 :(得分:17)

您可以尝试:

php index.php myFolder myController myFunc myParam1 myParam2 ...

答案 1 :(得分:1)

注意,类文件中的索引方法对于在CLI中正常工作是必要的,否则codeigniter将返回404错误。

答案 2 :(得分:0)

对于 CodeIgniter 1.7 (如果某人不幸不得不支持旧版项目),有一个here提及的解决方案:

  

从命令行运行CodeIgniter

     

目标

     

就像标题中所说的那样,我们的目标是能够从命令行运行CodeIgniter应用程序。这对于构建cron作业或运行更密集的操作是必需的,因此您没有Web脚本的资源限制,例如最长执行时间。

     

这是我的本地Windows计算机上的外观:   Screenshor from the original post

     

上面的代码就像调用此URL:

     

http://www.example.com/hello/world/foo

     

黑客

     

在您的CodeIgniter文件夹的根目录下创建一个“ cli.php”文件:

if (isset($_SERVER['REMOTE_ADDR'])) {
    die('Command Line Only!');
}



set_time_limit(0);

$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = $argv[1];

require dirname(__FILE__) . '/index.php';
  

如果您使用的是Linux环境,并且希望使该脚本可自行执行,则可以将其添加为cli.php的第一行:

#!/usr/bin/php
  

如果只希望特定的控制器仅是命令行,则可以在控制器构造函数中阻止Web调用:

class Hello extends Controller {

    function __construct() {
        if (isset($_SERVER['REMOTE_ADDR'])) {
            die('Command Line Only!');
        }
        parent::Controller();
    }

    // ...

}

答案 3 :(得分:0)

这对我有用:

您应该位于index.php所在的目录中,否则需要提供绝对路径。

php index.php ControllerName FuncName Param1 Param2 ...

将积分提供给@mlinuxgada上面的答案。就我而言,该文件夹名称不起作用,但将其删除对我而言是有效的。