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 đề:
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
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
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
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ỳ.
Phiên bản CodeIgniter của bạn là gì? – Vikk
Phiên bản của tôi là 2.0.3. – MacMac
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