2012-01-05 43 views
15

là có thể tạo ra một cái gì đó như thế này?Bao gồm tệp PHP dưới dạng chuỗi

// file.php 
$string = require('otherfile.php'); 
echo $string; 

// otherfile.php 
<!DOCTYPE html> 
<html> 
<head><title>Test</title></head> 
<body> 
<?php require 'body.php';?> 
</body> 
</html> 

// body.php 
<p>Lorem ipsum something</p> 

Và nhận kết quả này?

<!DOCTYPE html> 
<html> 
<head><title>Test</title></head> 
<body> 
<p>Lorem ipsum something</p> 
</body> 
</html> 

Tôi biết mã đó sẽ không hoạt động, nhưng tôi hy vọng bạn hiểu ý tôi.

+1

Xem: http://stackoverflow.com/questions/1683771/execute-a-php-file-and-return-the-result-as-a-string – BeRecursive

+0

Có vẻ như bạn đang phát minh lại các mẫu. Có lẽ bạn có thể sử dụng một công cụ mẫu? –

+0

Tôi nghĩ rằng các công cụ tạo mẫu đã tái phát minh ra PHP nhưng đó là vấn đề quan điểm :) – Yaniro

Trả lời

39

file.php

ob_start(); 
include 'otherfile.php'; 
$string = ob_get_clean(); 
+1

Có một hàm parse() trên trang PHP tại http://www.php.net/manual/en/function.ob-start.php thêm báo cáo lỗi và cho phép bạn chuyển các biến vào tệp mẫu. – Bink

+1

Giải pháp này tốt hơn Mark Bakers - nếu bạn muốn thực thi mã PHP bên trong otherfile.php – Gmeister4

+1

Điều này làm việc hoàn hảo cho tôi bên trong plugin wordpress của tôi, nơi tôi đang gọi một tệp bao gồm trong một shortcode.Cảm ơn @SmokeyPHP –

-2
<?php require "otherfile.php"; 
+0

Tôi đoán bạn không hiểu điều tôi đã nói – SnackerSWE

+0

-1'd Chắc chắn là bạn đã hiểu nhầm câu hỏi; @SnackerSWE đang tìm cách bao gồm một tệp, có phân tích cú pháp php và sau đó lấy nó làm chuỗi, nhưng không đưa nó vào trang hiện tại. –

0

Có, bạn có thể sử dụng một tuyên bố trở lại trong một tập tin, và đòi hỏi và bao gồm sẽ trả về giá trị trả lại, nhưng bạn sẽ phải sửa đổi các tập tin để nói điều gì đó giống như

<?php 
    return '<p>Lorem ipsum something</p>'; 
?> 

séc dụ # 5 dưới bao gồm tài liệu http://www.php.net/manual/en/function.include.php

3

Một điều thú vị để biết, nhưng câu trả lời của SmokeyPHP có thể là tốt hơn:

<?php 
$var = require 'myfile.php'; 

myfile.php:

<?php 
return 'mystring'; 
9
$string = file_get_contents('otherfile.php',TRUE); 
echo $string 

Sử dụng đối số TRUE cho file_get_contents() có nghĩa là nó sẽ tìm kiếm bằng đường dẫn bao gồm, chẳng hạn như bao gồm bình thường hoặc yêu cầu

+1

Nếu có PHP trong tệp này, nó sẽ không được diễn giải, bạn sẽ cần phải sử dụng eval hoặc một cái gì đó tương tự. – Manhim

+1

Manhim, tôi biết rằng nó sẽ cần phải gợi lên (hoặc làm đẹp nếu được lặp lại để hiển thị) .... đó là đọc của tôi về những gì OP muốn. –

1

Tôi đoán bạn đã giải quyết được sự cố. Tôi phải đối mặt với vấn đề tương tự trong những ngày này và tôi tìm thấy một giải pháp khá sử dụng eval, đào tạo Quản lý và chức năng đầu ra đệm:

ob_start(); 
eval('?>' . file_get_contents($fileToRequire, TRUE) . '<?php '); 
$this->output = ob_get_contents(); 
ob_end_clean(); 

duy nhất có một điều bạn phải quan tâm là để đặt mã php giữa các thẻ <?php ?> và không rời bất kỳ thẻ php mở nào.

'?>' Là bắt buộc nếu không bạn sẽ gặp lỗi từ hàm eval

Hy vọng điều đó sẽ hữu ích!

Chúc mừng!

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