PDA

View Full Version : سوال: جایگزینی کدهای php در یک string



mamali-mohammad
پنج شنبه 07 خرداد 1394, 13:37 عصر
سلام
من قصد دارم یه قالب طراحی کنم که کاربر به راحتی استفاده کنه و تغییر بده
به این منظور نیاز دارم که سیستم راحتی بنویستم
حالا اگه کاربر در قالب اینو بنویسه : X1
باید زمان اجرا X1 تبدیل بخ if(y == z) بشه
مثل قالب های بلاگفا که یه کد اختصاصی برای این مورد دارن

H:Shojaei
پنج شنبه 07 خرداد 1394, 14:48 عصر
خوب یک سری خطوط کد باید داشته باشید و یک سری کلمه کلیدی که خودتون به این خطوط کد اختصاص میدید و با اجرای برنامه توسط کاربر خطوط برنامه رو کامپایل یا پیمایش میکنید و به جای کلمات کلیدی که به کاربرده و شما تعریف کردین کد مربوطه رو میذارید... و بعد که کدها رو جایگزین کردین اینکلودش میکنید به پیج تا حالا باز سرور اونو کامپایل کنه...

H:Shojaei
پنج شنبه 07 خرداد 1394, 14:53 عصر
جالب شد واسه خودمم...
مثلا این کد رو ببینید:
صفحه testMyCode.php


echo"this is file with first content";

صفحه index.php


include 'test1.php';
$data='<?php if(1==1)echo "this is my code injected in testcode file";?>';
file_put_contents('test1.php', $data);
include 'test1.php';

mamali-mohammad
پنج شنبه 07 خرداد 1394, 15:07 عصر
مشکل اینه من نمی خوام include کنم

H:Shojaei
پنج شنبه 07 خرداد 1394, 15:36 عصر
خوب باز هم مشکلی نیست:


$data='if(1==1)echo "this is my string as php code";';
eval("$data");

mamali-mohammad
پنج شنبه 07 خرداد 1394, 15:45 عصر
ممنون دوست عزیز
replace رو چطور انجام بدم ؟
چون کد ما از قبل فراخوانی شده
مثال :

$txt = '1{foo}3';$data = str_replace('{foo}', 'if(1==1)echo 8', $txt); eval("$data");

H:Shojaei
پنج شنبه 07 خرداد 1394, 16:27 عصر
باید رشته رو تفکیک کنید اونهایی که قبل کلمه کلیدی هستن رو نمایش بدید به کلمه کلیدی که رسیدین جایگزین کنید و بعدیهاش رو هم باز نمایش بدین:


$txt = '1{foo}3';
preg_match_all('/(.*)\{(.*)\}(.*)/', $txt,$matches);
for ($i=1;$i<count($matches);$i++) {
if($matches[$i][0]!='foo')
echo $matches[$i][0];
else
eval('if(1==1)echo 8;');
}

mamali-mohammad
پنج شنبه 07 خرداد 1394, 17:07 عصر
ممنون اما این کار منطقی فکر نکنم باشه
چون پردازش رو بالا میبره
اینطور نیست ؟!
در ضمن اگه 7-8 تا کد foo داشتیم چی ؟
این فقط برای آخری کاربرد داره

H:Shojaei
پنج شنبه 07 خرداد 1394, 22:36 عصر
منطقی که من رو منطقش چون تو سیستم شما نیستم که چه کاری میخواید بکنید نظری نمیتونم بدم فقط میدونم کار میکنه به درستی و این یکی از راه حل ها میتونه باشه...
و در مورد این که فقط واسه آخره خیر این رو میتونید پویا کنید تا هر چندتا foo که داشتید بتونه بخونه یکم کار بیشتر میخواد...
من اینطوری نوشتم ولی شما میتونید واسه هر کلید این کارو بکنید یا یه الگوریتم یا راه حلی پیدا کنید که همه رو پوشش بده راه حل رو دارین ازین به بعد به مهارت خودتون بستگی داره...

imohammad
جمعه 08 خرداد 1394, 01:25 صبح
اگه واسه قالب میخوای اسمارتی رو یه نگاه بنداز
http://www.smarty.net/