PDA

View Full Version : فراخوانی تابعی از یک فایل php و ریختن کدهایش درون textarea



alasht
دوشنبه 02 اسفند 1389, 18:34 عصر
با سلام خدمت دوستان
من میخوام یه ویرایشگر php درست کنم که توابع یه فایل php رو به صورت جدا ویرایش کنه

فرض کنید من یه فایل به اسم index.php دارم و این فایل مثلا سه تا تابع داره
به این صورت


<?php
function tabe1() {
echo "html code 1";
}
function tabe2() {
echo "html code 2";
}
function tabe3() {
echo "html code 3";
}
?>
حالا میخوام تو یه فایل دیگه مثلا به اسم edit.php کدی بنویسم که مثلا تابع شماره 2 رو بخونه و کدهاش رو تو یه textarea بریزه به این صورت که فقط این قسمت رو بریزه تو textarea

echo "html code 2";و بعد مثلا من یکسری تغییرات توش بدم و با زدن دکمه submit دوباره فایل index.php رو بخونه و هر کدی تو اون تابع هست رو پاک کنه و کدهای textarea رو جایگزینش کنه
ممنوم میشم راهنمایی کنید :قلب:

mohsen24000
دوشنبه 02 اسفند 1389, 18:58 عصر
در اصل شما باید یک parser پیاده سازی کنی که یک فایل متنی رو بخونه و بر حسب نیازی که داری از اون اطلاعات رو استخراج و سپس بعد از تغییرات اعمال شده دوباره همون فایل متنی رو بازنویسی کنه حالا پسوندش هرچی می خواد باشه!

alasht
دوشنبه 02 اسفند 1389, 19:59 عصر
میشه بیشتر توضیح بدید
توضیحاتتون همراه با مثال باشه بهتره چون اینطوری هیچی نمی فهمم :لبخند:

alasht
دوشنبه 02 اسفند 1389, 21:55 عصر
سلام مجدد
دوستان کسی نیست این تاپبکو گرمش کنه :لبخند:

mtchabok
دوشنبه 02 اسفند 1389, 22:53 عصر
سلام عزیز
دو تا تابع برات نوشتم البته ساده اس و یخورده که روش کار کنی بهتر هم میشه ... البته همین الان هم درست کار میکنه ...

function get($functionName,$file){
if(!$fileContent = file_get_contents($file)) return false;
if(!$posStart = strpos($fileContent,'function '.$functionName.'(')) return false;
if(!$posEnd = strpos($fileContent,'function ',$posStart+5))
$posEnd = strrpos($fileContent,'}')+1;
$content = $posEnd?substr($fileContent,$posStart,$posEnd-$posStart):substr($fileContent,$posStart);
return $content;
}

function set($functionName,$file,$content){
if(!$fileContent = file_get_contents($file)) return false;
if($oldContent = get($functionName,$file)){
$fileContent = str_replace($oldContent,$content,$fileContent);
}else{
$fileContent = substr($fileContent,0,strrpos($fileContent,'?>'));
}
return file_put_contents($file,$fileContent)===false?fals e:true;
}

امتحانشون کن ... اگه ایرادی داشتن من در خدمتم .

alasht
سه شنبه 03 اسفند 1389, 00:17 صبح
اقا من که نفهمیدم چطور از این تابع استفاده کنم
میشه خودت درستش کنی فایلشو ضمیمه کنی
شرمنده واقعا

amir001
سه شنبه 03 اسفند 1389, 00:26 صبح
هم میتونی از عبارات منظم استفاده کنی و هم از بریدن رشته و قطعه قطعه کردن اون.

از عبارات منظم استفاده کنی راحت تری. با عبارت منظرم میتونی ساختار یک تابع را در زبان php بدی و تمامی توابع را جدا کتی و در textarea های مختلف قرار بدی. نوشتنشون هم که کاری نداری.

اگر از قطعه قطعه کردن بخواهی استفاده کنی میتونی از explode استفاده کنی و فایل را از روی کلمه ی function بشکنی و توابع را جدا کنی.

البته روش دوم زیاد مطمئن نیست ، چون به عنوان مثال اگر یک رشته حاوی کلمه function نیز داشته باشی خودش یک تابع در نظر گرفته میشه.

همه ی جوانب را بررسی کن و از یکیش استفاده کن.

alasht
سه شنبه 03 اسفند 1389, 01:03 صبح
اقا من کار عملی میخوام تئوری حالیم نمیشه
مشکلیه که همیشه دارم :گریه: