2011-10-06 33 views
11

Tôi đang theo dõi this tutorial khi chạy Codeigniter qua CLI. Tôi đã thực hiện mọi thứ họ đã thực hiện (đã sao chép và dán) bây giờ khi tôi chạy lệnh này, nó không làm những gì được mong đợi ngoại trừ nó xuất ra nội dung chỉ mục trang web.Chạy Codeigniter qua đầu ra CLI gốc của trang web thay vì kết quả mong đợi

$ cd /Users/MyUsername/Sites/code 
$ php index.php tools message 

Kết quả tôi nhận được là trang nguồn HTML, ví dụ: http://localhost/code.

Kết quả dự kiến ​​nên

Hello World! 

Làm thế nào tôi có thể đạt được điều này để làm cho nó hoạt động?

+0

Phiên bản CodeIgniter của bạn là gì? – Vikk

+0

Phiên bản của tôi là 2.0.3. – MacMac

+1

Và khi bạn truy cập các công cụ/tin nhắn trong trình duyệt, bạn sẽ nhận được "Hello World!" ? – imm

Trả lời

9

thử điều này:

php index.php/controller/function/param1/param2/param3 etc 

hoặc

php index.php controller function param1 param2 param3 etc 

cũng, đăng nội dung của bạn $ _SERVER var và giá trị của 'uri_protocol' biến từ config.php.

$ config [ 'uri_protocol'] nên 'AUTO'

+4

Tôi có vấn đề tương tự, nhưng khi tôi sử dụng một 'php index.php/tools/tin nhắn' Tôi có 'Không có tập tin đầu vào được chỉ định.' lỗi – Mikhail

+0

Mikhail, tôi đang gặp vấn đề tương tự như bạn. Bạn đã tìm thấy một giải pháp? –

+0

'php index.php/tools/message' không hoạt động khi tôi chạy' docker exec', tôi phải thay đổi $ config ['uri_protocol'] thành 'AUTO'. – zx1986

1

Kết quả tôi nhận được là nguồn HTML của trang chỉ mục, ví dụ: http://localhost/code.

Bạn gặp lỗi với định tuyến của mình, trình điều khiển CLI mẫu mới của bạn không bị kích hoạt mà là bộ điều khiển khác. Lỗi nào bạn gặp phải với định tuyến của mình là khó nói vì bạn chưa hiển thị toàn bộ mã của mình.

5

Đối với tôi đây là giải quyết bằng cách thay đổi:

$config['uri_protocol'] = 'AUTO' 

trong tập tin cấu hình chính.

trước đây tôi đã thay đổi nó để

'REQUEST_URI' 

không hoạt động với CLI rõ ràng.

+0

Cảm ơn bạn! Điều này chính xác đã làm cho tôi. – fool4jesus

+0

Đã cố gắng để chạy từ cli với uri_protocol thiết lập để "PATH_INFO" đã không làm việc sau đó, thay đổi nó thành "AUTO" đã làm nó cho tôi. cảm ơn! –

1

Tôi biết rằng câu hỏi này là cũ và đã được trả lời, nhưng đối với bản thân mình và những người khác, câu trả lời đã chọn không hoạt động. Những gì tôi đã tìm thấy để làm việc chỉ là sử dụng wget. Trước khi bạn bỏ phiếu cho tôi vì bạn đang tìm kiếm thứ gì đó không cho phép khách truy cập bên ngoài, hãy nghe tôi!

Nếu bạn sử dụng wget kết hợp với $this->input->ip_address(); bạn có thể đảm bảo rằng máy duy nhất truy cập tập lệnh của bạn là máy chủ web của riêng bạn. Nó không phải là tốt như có thể gọi tập tin cục bộ bằng cách sử dụng php index.php controller function, nhưng nó là một dự phòng.

Dưới đây là những gì tôi đã tạo ra mà đã làm việc cho một vài tháng mà không vấn đề:

  1. Tạo một thư mục ở đâu đó trên máy chủ của bạn rằng bạn chỉ có thể sử dụng như một pad đầu cho các tập tin tạm thời được tạo ra bởi wget. Tôi đã tạo một thư mục có tên là cron một cấp bên dưới thư mục public_html của tôi.

    ví dụ: /home/myuser/cron

  2. Xây dựng lệnh cron của bạn. Bạn có thể chuỗi các lệnh bằng cách sử dụng &&.

    i. cd /home/myuser/cron && - di chuyển đến thư mục đầu của bạn

    ii. wget http://www.site.com/cron/foo && - hãy wget tệp của bạn

    iii. rm -f foo - Hủy bỏ các tập tin tải về "foo" từ thư mục đầu bạn

  3. lệnh cuối cùng của bạn sẽ trông giống như thế này:

    cd /home/myuser/cron && wget http://www.site.com/cron/foo && rm -f foo

  4. Kiểm tra xem địa chỉ IP truy cập vào các file cron của bạn bằng máy chủ web của IP:

    <?php defined('BASEPATH') OR exit('No direct script access allowed'); 
    
    class Cron extends MY_Controller { 
    
        public function __construct() 
        { 
    
         parent::__construct(); 
    
         // this controller can only be called from the IP xxx.xxx.xxx.xxx 
         if ($this->input->ip_address() !== 'xxx.xxx.xxx.xxx'){ 
    
          show_error('Direct access is not allowed'); 
    
         } 
    
        } 
    
        function foo($bar = 'bar') 
        { 
    
         echo $this->input->ip_address(); 
    
        } 
    
    } 
    

Quan trọng: Vui lòng đảm bảo rằng bạn hiểu đầy đủ các hiệu ứng của rm -f. Nó có thể có những hậu quả thú vị nếu bạn không cung cấp tệp chính xác. Nếu bạn có thời gian rảnh, bạn có thể chọn không xóa tệp và chỉ xóa thủ công tất cả các tệp cron cào theo định kỳ.

+1

Vâng, đó là điều tuyệt vời cho những người muốn sử dụng 'wget'. Xin lưu ý bạn có thể sử dụng '--delete-after' để xóa trang đã tải xuống sau khi chạy' wget'. – MacMac

+0

hmm, tôi không biết điều đó. Tôi nên đọc trang người đàn ông trước. Đó có lẽ là tốt hơn so với sử dụng rm. – VictorKilo

0

Ok xin lỗi để nói nhưng ở đây trên trang này https://ellislab.com/codeigniter/user-guide/general/cli.html

Họ không đề cập đến việc các đường dẫn gốc của thư mục mà chúng tôi đặt CodeIgniter hoặc thư mục điều khiển. Tôi đã tìm kiếm rất nhiều về vấn đề đó. Tôi đã thử những thứ khác nhau và sau đó tôi đã tìm thấy điều đó.

trước đó thiết lập PHP để biến môi trường PATH của bạn {Run php file in windows CMD}

sau khi thiết lập các biến môi trường PATH

  1. đi đến cmd
  2. cd con đường nơi bạn đặt CodeIgniter (tức CI /)
  3. php index.php/tools/message

bạn sẽ nhận được

Hello World! 

trên màn hình cmd của bạn.

Các vấn đề liên quan