Làm cách nào để tải tệp PHP vào một biến?


98

Tôi cần tải một tệp PHP vào một biến. Giốnginclude();

Tôi đã tải một tệp HTML đơn giản như sau:

$Vdata = file_get_contents("textfile.txt");

Nhưng bây giờ tôi cần tải một tệp PHP.

Câu trả lời:


116

Tôi cho rằng bạn muốn lấy nội dung do PHP tạo ra , nếu vậy hãy sử dụng:

$Vdata = file_get_contents('http://YOUR_HOST/YOUR/FILE.php');

Ngược lại, nếu bạn muốn lấy mã nguồn của tệp PHP , thì nó giống với tệp .txt:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');

6
Điều gì sẽ xảy ra nếu tôi muốn lấy "nội dung được tạo bởi PHP" mà không sử dụng http và sử dụng trực tiếp đường dẫn?
Osa

4
@Osa: Tùy thuộc vào nhu cầu của bạn, bạn có thể sử dụng eval()hoặc nếu bạn đang xử lý mã phức tạp hơn: github.com/nikic/PHP-Parser .
Alix Axel

2
thực hiện một phân tích cú pháp php chỉ cho điều đó có vẻ như một overkill khổng lồ
David Fariña

1
Tôi không biết làm thế nào điều này sẽ vượt qua POST hoặc GET. Tôi nghĩ câu trả lời của neobie sẽ đúng và phù hợp hơn, vì tệp PHP bên ngoài sẽ được xử lý trong ngữ cảnh của tệp hiện tại.
ADTC

Sử dụng ví dụ trên, bạn có thể sử dụng get_template_directory_uri () và tham gia vào đường dẫn tệp của bạn. Điều này sẽ giải quyết vấn đề sử dụng một đường dẫn trực tiếp. $Vdata = file_get_contents(get_template_directory_uri() . '/path/to/file/in/theme.text');
Ian Bruce

124
ob_start();
include "yourfile.php";
$myvar = ob_get_clean();

ob_get_clean ()


1
Điều đó hoạt động! Nhưng bất cứ khi nào tôi cố gắng bao gồm: yourfile.php? Id = 3, nó sẽ không hoạt động. Bất kỳ đề xuất?
tvgemert

1
Bởi vì bạn không sử dụng http nữa, bạn cần chuyển các giá trị qua $ _GET trong trường hợp đó.
Francesco Belladonna

Làm thế nào về những hình ảnh?
kta

1
Mẹo: Kể từ PHP 4.3.0, bạn có thể rút ngắn hai dòng cuối cùng thành chỉ $myvar = ob_get_clean();(xem tài liệu ob_get_clean )
ADTC

Hoàn hảo! Cảm ơn bạn.
lowtechsun

7

Nếu bạn đang sử dụng http: // , như eyze đề xuất, bạn sẽ chỉ có thể đọc phần bổ sung của tập lệnh PHP. Bạn chỉ có thể đọc chính tập lệnh PHP nếu nó nằm trên cùng một máy chủ với tập lệnh đang chạy của bạn. Sau đó, bạn có thể sử dụng một cái gì đó như

$Vdata = file_get_contents('/path/to/your/file.php");

xin chào, điều này chỉ nhận được html tĩnh. xem ví dụ này. nếu đây là tệp chúng tôi sẽ tải; /////////////////// <? php echo ("text1"); ?> Text2 /////////////// đây là out put tôi đã nhận; //////////////////// Text2 ///////////////////
Kombuwa

@Kombuwa, bạn có thể vui lòng làm rõ câu trả lời của bạn trong một bản chỉnh sửa cho câu hỏi ban đầu của bạn, nơi bạn có thêm không gian để giải thích rõ ràng? Cảm ơn =)
David nói hãy phục hồi Monica

7

Nếu bạn muốn tải tệp mà không cần chạy tệp qua máy chủ web, thì cách sau sẽ hoạt động.

$string = eval(file_get_contents("file.php"));

Thao tác này sẽ tải sau đó đánh giá nội dung tệp. Tệp PHP sẽ cần phải được định dạng đầy đủ với các thẻ <?phpvà để đánh giá nó.?>eval


Tôi thích phương pháp này. Chỉ là tệp của tôi không được định dạng đầy đủ với các thẻ <? Php và?> Để eval đánh giá nó. Còn cách nào khác không?
ItsMeDom

4

Về mặt lý thuyết, bạn chỉ có thể sử dụng fopen, sau đó sử dụng stream_get_contents.

$stream = fopen("file.php","r");
$string = stream_get_contents($stream);
fclose($stream);

Điều đó sẽ đọc toàn bộ tệp thành $ string cho bạn và không nên đánh giá nó. Mặc dù tôi rất ngạc nhiên rằng file_get_contents không hoạt động khi bạn chỉ định đường dẫn cục bộ ....


3

Ngoài ra, bạn có thể bắt đầu lưu vào bộ đệm đầu ra, thực hiện bao gồm / yêu cầu và sau đó dừng bộ đệm. Với ob_get_contents (), bạn chỉ có thể lấy nội dung được xuất bởi tệp PHP khác đó thành một biến.


3

Nếu tệp của bạn có câu lệnh trả về như sau:

<?php return array(
  'AF' => 'Afeganistão',
  'ZA' => 'África do Sul',
  ...
  'ZW' => 'Zimbabué'
);

Bạn có thể đưa nó vào một biến như thế này:

$data = include $filePath;

1
plus1 Cảm ơn bạn, đây là những gì tôi đang tìm kiếm
whitesiroi

1

file_get_contents () sẽ không hoạt động nếu máy chủ của bạn đã tắt allow_url_fopen . Hầu hết các máy chủ web chia sẻ đều bị tắt tính năng này theo mặc định do rủi ro bảo mật. Ngoài ra, trong PHP6 , tùy chọn allow_url_fopen sẽ không còn tồn tại và tất cả các chức năng sẽ hoạt động như thể nó được đặt thành tắt. Vì vậy, đây là một phương pháp rất tệ để sử dụng.

Tùy chọn tốt nhất của bạn để sử dụng nếu bạn đang truy cập tệp qua http là cURL

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.