سؤال

لدي سلسلة HTML & PHP في ذلك ، عندما سحب سلسلة من قاعدة البيانات ، فمن صدى ان الشاشة ، ولكن رمز PHP لا عرض.السلسلة تبدو مثل هذا:

   $string = 'Hello <?php echo 'World';?>';
   echo $string;

الإخراج

   Hello

التعليمات البرمجية المصدر

   Hello <?php echo 'World';?>

عندما أنظر في التعليمات البرمجية المصدر ، أستطيع أن أرى php الخط هناك.إذا ما كنت بحاجة إلى القيام به هو eval() فقط php جزء في السلسلة.

شيء واحد للنظر هو أن PHP يمكن أن يكون موجودا في أي مكان في السلسلة في أي وقت.

* فقط للتوضيح بي PHP التكوين هو الصحيح ، هذا هو حال بعض PHP يجري ملقاة من قاعدة البيانات وليس التقديم ، لأنني صدى يعود إلى متغير مع رمز PHP في ذلك ، فشلت في تشغيل.*

شكرا مرة أخرى على أي مساعدة قد تتلقاها.

هل كانت مفيدة؟

المحلول

$str = "Hello
<?php echo 'World';?>";

$matches = array();

preg_match('/<\?php (.+) \?>/x', $str, $matches);

eval($matches[1]);

هذا العمل, ولكن مثل الآخرين وسوف تشير إلى أن هذا هو فكرة سيئة.التطبيق الخاص بك العمارة ينبغي أبدا تدور حول تخزين التعليمات البرمجية في قاعدة البيانات.

ببساطة إذا كان لديك الصفحات التي تحتاج دائما إلى عرض سلاسل, تخزين تلك السلاسل في قاعدة البيانات ، وليس رمز لإنتاجها.بيانات العالم الحقيقي هو أكثر تعقيدا من ذلك ، ولكن يجب أن يكون دائما بشكل صحيح غرار في قاعدة البيانات.

تحرير:سوف تحتاج إلى التكيف مع preg_replace_callback لإزالة المصدر/أقحم بشكل صحيح.

نصائح أخرى

يجب أن لا eval رمز php, فقط تشغيله.إنها تحتاج إلى مترجم php تثبيت اباتشي+php تكوينه بشكل صحيح.ثم هذا .ملف php يجب إخراج مرحبا العالم.

الجواب على تحرير: استخدام preg_replace_callback للحصول على php الجزء, eval ذلك استبدال المدخلات إلى مخرجات ، ثم صدى ذلك.ولكن.إذا كان يجب أن eval الأشياء تأتي من قاعدة البيانات, أنا تقريبا متأكد انه خطأ التصميم.

eval() ينبغي أن تعمل بشكل جيد ، طالما أن القانون هو الصحيح PHP و ينتهي بفاصلة منقوطة.ما رأيك في تجريدها php الوسم أولا ثم eval ذلك.

المثال التالي تم اختباره ويعمل:

<?php
$db_result = "<?php echo 'World';?>";
$stripped_code = str_replace('?>', '', str_replace('<?php', '', $db_result));
eval($stripped_code);
?>

فقط تأكد من أن كل ما يمكنك استرداد من db تم بشكل صحيح مطهرة الأولى منذ كنت أساسا مما يسمح أي شخص يمكن الحصول على المحتوى في ديسيبل ، إلى تنفيذ التعليمات البرمجية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top