2011-12-12 35 views
9

Tôi đang thiết kế mô hình MVC của riêng tôi để giảm bớt quá trình tạo trang chủ. Hệ thống khuôn mẫu của tôi cần lớp điều khiển của tôi để xuất ra các khung nhìn của tôi. Điều này có nghĩa là tôi phải xuất tệp thông qua một hàm php. Tôi đã tìm kiếm một thời gian và không thể tìm ra giải pháp.Làm thế nào để chạy mã php từ file_get_contents hoặc tập tin trong một chức năng

Làm thế nào tôi có thể, thông qua một hàm PHP, chạy một chuỗi đại diện cho một số mã nguồn ("<?", "<? Php", "?>" Và vân vân) dưới dạng php? Đánh giá sẽ không lấy số < của tôi? dấu hiệu (và tôi đọc chức năng đó là crap vì lý do nào đó).

Trả lời

2

Chỉ cần bao gồm() nhập tệp thay vào đó sẽ ổn. Tôi đã không đào sâu vào mã nguồn nhưng tôi khá chắc chắn đó là cách Zend Framework triển khai các khuôn mẫu.

0

Vâng, eval là không crap cho mỗi gia nhập, nó chỉ là dễ dàng để tạo ra một lỗ hổng bảo mật với điều đó nếu bạn 'không cẩn thận về những gì bạn cho phép bên trong đó eval (đó, và có lẽ thực tế là nó có thể là xấu cho khả năng đọc mã).

Đối với các biển báo <?, đó là vì eval mong đợi mã php, vì vậy nếu bạn không muốn kết hợp php với đầu ra đơn giản, chỉ bao gồm thẻ đóng ?>.

Tuy nhiên, nói chung, bạn có thể triển khai mẫu theo kiểu thời trang tốt hơn, cố gắng xem xét bộ đệm đầu ra.

3

Thay thế "echo file_get_contents()" bằng "include()" như GordonM được đề xuất làm việc chính xác khi cần. không thể upvote kể từ khi tôi quá mới, nhưng đối với nhu cầu của tôi đây là câu trả lời trực tiếp cho câu hỏi tiêu đề.

1
$code = '<?php 
function GetBetween($content, $start, $end) { 
    $r = explode($start, $content); 
    if (isset($r[1])){ 
    $r = explode($end, $r[1]); 
    return $r[0]; 
    } 
    return ''; 
}'; 

function _readphp_eval($code) { 
    ob_start(); 
    print eval('?>'. $code); 
    $output = ob_get_contents(); 
    ob_end_clean(); 
    return $output; 
} 

print _readphp_eval($code); 
Các vấn đề liên quan