Tôi đang viết một hệ thống cho một ứng dụng trình duyệt sẽ lưu trữ một số tập lệnh php cụ thể trong cơ sở dữ liệu và sau đó kéo chúng ra và thực thi chúng khi cần. Lúc đầu, tôi đã thử bằng cách sử dụng exec() và piping để php đầu ra của một kịch bản có các kịch bản ra khỏi cơ sở dữ liệu và in chúng. Điều này làm việc trong một trường hợp sử dụng, nhưng không phải tất cả, và cảm thấy giòn anyway, vì vậy tôi đang tìm kiếm một cách tốt hơn.Bao gồm từ luồng "php: // memory"
Tôi hiện đang cố thực hiện điều này thông qua việc sử dụng luồng tệp PHP trong bộ nhớ. Ví dụ:
$thing = <<<'TEST'
<?php
$thing = array();
print "Testing code in here.";
var_dump($thing);
?>
TEST;
$filename = "php://memory";
$fp = fopen($filename, "w+b");
fwrite($fp, $thing);
//rewind($fp);
fclose($fp);
include "php://memory";
Tuy nhiên, không có gì được in khi tập lệnh được thực thi. Điều này có thể thực hiện được bằng cách này hay không, và nếu không, liệu có cách nào khác để làm điều này không? Tôi đang cố gắng tránh phải viết các tập tin tạm thời và đọc từ chúng, vì tôi chắc chắn rằng việc truy cập hệ thống tập tin sẽ làm chậm mọi thứ. Có một URL tôi có thể cung cấp để "bao gồm" để nó sẽ đọc dòng bộ nhớ như thể nó là một tập tin?
Tôi không nghĩ rằng eval()
sẽ làm điều này, vì, nếu tôi nhớ chính xác, nó bị giới hạn ở một dòng.
Ngoài ra, vui lòng không trả lời "eval = include = hell". Người dùng không phải quản trị viên không có quyền truy cập để viết các tập lệnh được lưu trữ trong cơ sở dữ liệu, tôi biết rằng điều này cần được xử lý đặc biệt trong vòng đời của ứng dụng của tôi.
My từ, tôi hoàn toàn sai. Eval làm việc cho nhiều hơn một dòng. Tôi thậm chí không thử nó lol ... giả sử rằng sẽ làm việc sau đó. Tuy nhiên, tôi vẫn tò mò về các luồng tệp được lưu trữ trong bộ nhớ, vì vậy nếu có ai có câu trả lời cho phần đó, tôi sẽ rất biết ơn. –
Có lý do cụ thể nào khiến bạn không muốn tạo tệp không? Hệ thống tập tin là một cơ sở dữ liệu cho các tập tin. Và: OMG KHÔNG LÀM R THNG NGUY HIỂM. Nó không quan trọng nếu chỉ quản trị viên có thể ghi vào các tệp php này, ngay khi bạn có lỗi SQL injection hoặc ai đó quản lý để nhận/đoán/tiết lộ thông tin đăng nhập MySQL của bạn -> insta-remote-code-execution. – mensi