2009-05-12 13 views
12

Tôi muốn nhận nội dung của tệp .php trong một biến trên trang khác.Cách thực thi và nhận nội dung của tệp .php trong một biến?

Tôi có hai tệp, myfile1.phpmyfile2.php.

myfile2.php

<?PHP 
    $myvar="prashant"; // 
    echo $myvar; 
?> 

Bây giờ tôi muốn có được giá trị lặp lại bởi các myfile2.php trong một biến trong myfile1.php, tôi đã thử các cách follwing, nhưng dùng nó tất cả các nội dung bao gồm cả thẻ php().

<?PHP 
    $root_var .= file_get_contents($_SERVER['DOCUMENT_ROOT']."/myfile2.php", true); 
?> 

Vui lòng cho tôi biết cách lấy nội dung được một tệp PHP trả về một biến được xác định trong tệp PHP khác.

Cảm ơn

+0

The-chấp nhận không trả lời dưới đây là tốt hơn một: http://stackoverflow.com/a/851773/632951 – Pacerier

+0

** LUÔN được carefull **, bởi vì nếu bạn sẽ sử dụng 'ob_get_contents()', sau đó bạn có thể cần phải làm 'ob_end_flush', otherwises bạn có thể có vấn đề, nếu bạn sử dụng sẽ sử dụng bất kỳ php' header' lệnh sau đó. –

Trả lời

1

Bạn có thể sử dụng các chỉ thị include để làm điều này.

Tập 2:

<?php 
    $myvar="prashant"; 
?> 

Tập 1:

<?php 

include('myfile2.php'); 
echo $myvar; 

?> 
+0

Tôi biết phương pháp này đã được và làm việc tốt, nhưng không có cách nào khác hơn này? – Prashant

+0

@Prashant Và vấn đề của bạn với phương pháp này là gì? Nó được thụt vào để làm điều này. –

+0

Thực ra tôi chỉ đang tìm kiếm phương thức kiểu "trả về" có thể trực tiếp cho tôi giá trị. Dù sao tôi đã áp dụng câu trả lời của @ zombat vì phương pháp được đề xuất bởi @harto có thể có một số vấn đề về hiệu suất và tôi không thể thỏa hiệp với hiệu suất. Cảm ơn anh chàng. – Prashant

17

Nếu bạn chỉ muốn nội dung echo() 'ed bởi trang bao gồm, bạn có thể xem xét sử dụng đầu ra đệm:

ob_start(); 
include 'myfile2.php'; 
$echoed_content = ob_get_clean(); // gets content, discards buffer 

Xem http://php.net/ob_start

+0

ob_start() là mới đối với tôi. Vì vậy, @harto bạn có thể đề xuất cho tôi phương pháp nào sẽ làm tốt hơn theo hiệu suất, phương pháp của bạn hoặc phương pháp @zombat được đề xuất không ?? – Prashant

+1

Đệm đầu ra cho biết thêm một hiệu suất nhỏ, vì có chi phí khởi tạo và duy trì bộ đệm. – zombat

+1

@Prashant: Tôi không có sẵn bất kỳ dữ liệu nào, nhưng tôi đoán rằng tác động hiệu suất sẽ không đáng kể.Bạn có thể thử cả hai phương pháp và xem nếu có một sự khác biệt có thể đo lường giữa hai, nhưng tôi nghĩ rằng nó sẽ là rất nhỏ thực sự. – harto

4

"Thực ra tôi chỉ đang tìm kiếm là có bất kỳ phương thức trả về nào có thể trực tiếp cho tôi giá trị" - Bạn vừa trả lời câu hỏi của riêng bạn.

Xem http://sg.php.net/manual/en/function.include.php, Ví dụ # 5

file1.php:

<? return 'somevalue'; ?> 

file2.php:

<? 

$file1 = include 'file1.php'; 
echo $file1; // This outputs 'somevalue'. 

?> 
+1

Ah! Tôi không biết điều này. – harto

+0

Điều này xứng đáng có nhiều lượt xem hơn! – GlabbichRulz

30

Bạn phải phân biệt hai điều:

  • Đỗ bạn muốn nắm bắt tput (echo, print, ...) của tệp được bao gồm và sử dụng đầu ra trong một biến (chuỗi)?
  • Bạn có muốn trả về một số giá trị nhất định từ các tệp được bao gồm và sử dụng chúng làm biến số trong tập lệnh lưu trữ của mình không?

Biến cục bộ trong tệp được bao gồm của bạn sẽ luôn được di chuyển đến phạm vi hiện tại của máy chủ lưu trữ tập lệnh - điều này cần lưu ý.Bạn có thể kết hợp tất cả các tính năng này vào một:

include.php

$hello = "Hello"; 
echo "Hello World"; 
return "World"; 

host.php

ob_start(); 
$return = include 'include.php'; // (string)"World" 
$output = ob_get_clean(); // (string)"Hello World" 
// $hello has been moved to the current scope 
echo $hello . ' ' . $return; // echos "Hello World" 

Các return -feature có ích đặc biệt là khi sử dụng các file cấu hình.

config.php

return array(
    'host' => 'localhost', 
    .... 
); 

app.php

$config = include 'config.php'; // $config is an array 

EDIT

Để trả lời câu hỏi của bạn về hình phạt hiệu quả khi sử dụng bộ đệm đầu ra, tôi chỉ làm một số thử nghiệm nhanh chóng. 1.000.000 lần lặp của ob_start()$o = ob_get_clean() tương ứng mất khoảng 7,5 giây trên máy tính Windows của tôi (có lẽ không phải là môi trường tốt nhất cho PHP). Tôi muốn nói rằng tác động hiệu suất nên được coi là khá nhỏ ...

0

Nếu bạn muốn nhận được khắp nơi trên sử dụng trang web bằng

<?php 
$URL = 'http://www.example.com/'; 
$homepage = file_get_contents($URL); 
echo $homepage; 
?> 
0

Vui lòng thử mã này

myfile1.php

<?php 
    echo file_get_contents("http://domainname/myfile2.php"); 
?> 

myfile2.php

<?PHP 
    $myvar="prashant"; 
    echo $myvar; 
?> 
7

Tôi luôn cố gắng tránh các chức năng ob_. Thay vào đó, tôi sử dụng:

<?php 
$file = file_get_contents('/path/to/file.php'); 
$content = eval("?>$file"); 
echo $content; 
?> 
+1

Câu trả lời của bạn thật thú vị. Bạn có thể vui lòng chia sẻ rằng tại sao bạn tránh đệm đầu ra, và sử dụng eval() thay thế? Câu trả lời của bạn sẽ là một kiến ​​thức tốt cho tôi. –

+0

Cảm ơn 'trick ("?> $ File ")' trick. Điều đó thực sự hữu ích. – Tobia

+0

Các chức năng OB_ sửa đổi bộ đệm đầu ra, và nhiều mã khác trong CMS có thể sử dụng các hàm đệm một cách vô tình tại thời điểm đó, và nó có thể gây xung đột, hoặc bộ đệm sạch, hoặc sửa đổi nó ... Vì vậy, tôi không bao giờ chạm vào nó. –

2

Bạn có thể sử dụng bộ đệm đầu ra, mà sẽ lưu trữ tất cả mọi thứ bạn đầu ra, và sẽ không in ra trừ khi bạn rõ ràng cho nó, hoặc không kết thúc/xóa bộ đệm vào cuối năm con đường thực hiện.

// Create an output buffer which will take in everything written to 
// stdout(i.e. everything you `echo`ed or `print`ed) 
ob_start() 
// Go to the file 
require_once 'file.php'; 
// Get what was in the file 
$output = ob_get_clean();