मैं ब्राउज़र एप्लिकेशन के लिए एक सिस्टम लिख रहा हूं जो डेटाबेस में कुछ विशेष PHP स्क्रिप्ट को संग्रहीत करेगा और फिर उन्हें बाहर खींचकर आवश्यकतानुसार निष्पादित करेगा। सबसे पहले मैंने निष्पादन() और पाइपिंग को एक स्क्रिप्ट के आउटपुट का उपयोग करने का प्रयास किया जिसने स्क्रिप्ट को डेटाबेस से बाहर निकाला और उन्हें मुद्रित किया। यह एक प्रयोग के मामले में काम करता था, लेकिन सभी नहीं, और भंगुर महसूस करता है, इसलिए मैं एक बेहतर तरीका ढूंढ रहा हूं।"php: // memory" स्ट्रीम से शामिल है
अब मैं स्मृति में एक PHP फ़ाइल स्ट्रीम के उपयोग के माध्यम से इसे पूरा करने का प्रयास कर रहा हूं। उदाहरण के लिए:
$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";
हालांकि, स्क्रिप्ट निष्पादित होने पर कुछ भी मुद्रित नहीं किया जाता है। क्या यह इस माध्यम से भी संभव है, और यदि नहीं, तो ऐसा करने का कोई और तरीका है? मैं अस्थायी फ़ाइलों को लिखने और उनसे पढ़ने से बचने की कोशिश कर रहा हूं, क्योंकि मुझे यकीन है कि फाइल सिस्टम तक पहुंचने से चीजों को धीमा कर दिया जाएगा। क्या कोई ऐसा URL है जिसे मैं "शामिल" करने के लिए प्रदान कर सकता हूं ताकि यह स्मृति स्ट्रीम को पढ़ सके जैसे कि यह एक फ़ाइल थी?
मुझे नहीं लगता कि eval()
ऐसा करेगा, जैसा कि मुझे सही याद है, यह एक पंक्ति तक ही सीमित है।
इसके अलावा, कृपया "eval = include = hell" उत्तर नहीं दें। गैर-व्यवस्थापक उपयोगकर्ताओं को डेटाबेस में संग्रहीत स्क्रिप्ट लिखने की पहुंच नहीं है, मुझे पता है कि इसे मेरे आवेदन के जीवन चक्र पर विशेष उपचार की आवश्यकता है।
मेरे शब्द, मैं पूरी तरह से गलत था। Eval एक से अधिक लाइन के लिए काम करता है। मैंने इसे भी कोशिश नहीं की ... मान लीजिए कि तब काम करेगा। हालांकि, मैं अभी भी स्मृति में संग्रहीत फ़ाइल धाराओं के बारे में उत्सुक हूं, इसलिए यदि किसी के पास उस हिस्से का उत्तर है, तो मैं आभारी रहूंगा। –
क्या कोई विशेष कारण है कि आप फाइलें बनाना नहीं चाहते हैं? फाइल सिस्टम फाइलों के लिए एक डेटाबेस है। और: ओएमजी ऐसा मत करो जो खतरनाक है। इससे कोई फर्क नहीं पड़ता कि केवल व्यवस्थापक इन php फ़ाइलों को लिख सकते हैं, जैसे ही आपके पास SQL इंजेक्शन बग है या कोई आपके MySQL प्रमाण-पत्र -> insta-remote-code-execution को प्राप्त/अनुमान/प्रकट करने का प्रबंधन करता है। – mensi