جدا کردن php از html

P.H.P

Member
خروجی کد html

مثلا اگه قالب سایت رو بخوای جدا کنی باید یه خروجی از قالب بدی که متغییر ها رو بتونه بخونه
با fopen, get_contents, fsockopen راحت انجام میشه
 

sunrise

Member
يه روش بهتر هم وجود داره، اونم اينه که يک فايل جدا در نظر گرفته بشه (يا مي تونه داخل ديتابيس قرار بگيره، اين به نظر شما بستگي داره) که محتوي کد HTML هست و داخل اون يه سري متغيرهايي وجود داره و يه سري هم کدهاي HTML ، قسمت هايي که بصورت متغير در نظر گرفته ميشه بعدا توسط روشي که ميگم توسط کامپايلر PHP مورد لطف قرار مي گيره و به داده مناسب مبدل ميشه.

منظورم رو با ذکر يک مثال ساده بيان مي کنم، فرض کنيد ما مي خواهيم چنين چيزي داشته باشيم:

[LTR] Hello, sunrise[/LTR]

براي اين منظور کد PHP رو بصورت زير مي نويسيم:
PHP:
$name = 'sunrise';
$template = '<strong>Hello,</strong> $name';
eval('echo "' . $template . '";');

البته در اين مثال من تپمليت رو هم داخل همون فايل قرار دادم اما اين مي تونه جدا باشه و بعدا require بشه يا اينکه حتي از يک جدول ديتابيس خونده بشه.

اميدوارم اين روش به دردتون بخوره، ضمن اينکه من خودم هميشه از اين روش استفاده مي کنم، البته بعد از اينکه متوجه شدم استفاده از موتورهاي تمپليت پيش ساخته از جمله Smarty نمي تونه انتظارهاي من رو برآورده کنه.
 

parsiteam

Member
یک سوال فنی : اگر بجای

PHP:
eval('echo "' . $template . '";');

از کد زیر هم استفاده کنیم فکر نکنم مشکلی پیش بیاد :

PHP:
echo $template;
 

sunrise

Member
تست کردم . مشکل پیش نیومد :d
مطمئنيد!!! وقتي به اون صورتي که شما بيان کرديد کد نوشته بشه خروجي بصورت زير خواهد بود:
دليلش هم اين هست که مقادير درون single-quote پارس نميشه و شايد همين وجه تمايزي بين double-quote (") و single-quote (') در PHP باشه.
 

parsiteam

Member
بله . مطمئنم . اینم دقیقا دستورات فایلم :

PHP:
<?php
$name = 'sunrise';
$template = '<strong>Hello,</strong> '.$name.'';
echo $template; 
?>

خروجی :

Hello, sunrise

منظور من این بود که دستور eval رو حذف کنیم . چون خود دستور eval یک دستور سنگینیه برای Apache . استفاده از آن هم بجز در موارد معدودی پیشنهاد نمیشه . حالا حساب کنید اگر برای یک Template Engine همش از دستور eval استفاده بشه چه فشاری روی سرور میاره !!!! یعنی عملا کار دستور eval اینه که کد های داخل خودشو به همان زبان اجرا می کنه . حتی eval داخل جاوااسکریپت هم استفاده میشه ولی دستورات جاوااسکریپت رو اجرا میکنه . به عبارت بهتر eval میاد بدون تگ <?php ?> دستورات رو Run میکنه . اینم منبع :

Evaluates the string given in code_str as PHP code. Among other things, this can be useful for storing code in a database text field for later execution.

There are some factors to keep in mind when using eval(). Remember that the string passed must be valid PHP code, including things like terminating statements with a semicolon so the parser doesn't die on the line after the eval(), and properly escaping things in code_str . To mix HTML output and PHP code you can use a closing PHP tag to leave PHP mode.

Also remember that variables given values under eval() will retain these values in the main script afterwards.
 
آخرین ویرایش:

sunrise

Member
بله . مطمئنم . اینم دقیقا دستورات فایلم :

PHP:
<?php
$name = 'sunrise';
$template = '<strong>hello,</strong> '.$name.'';
echo $template; 
?>

خروجی :

hello, sunrise

منظور من این بود که دستور eval رو حذف کنیم . چون خود دستور eval یک دستور سنگینیه برای apache . استفاده از آن هم بجز در موارد معدودی پیشنهاد نمیشه . حالا حساب کنید اگر برای یک template engine همش از دستور eval استفاده بشه چه فشاری روی سرور میاره !!!! یعنی عملا کار دستور eval اینه که کد های داخل خودشو به همان زبان اجرا می کنه . حتی eval داخل جاوااسکریپت هم استفاده میشه ولی دستورات جاوااسکریپت رو اجرا میکنه . به عبارت بهتر eval میاد بدون تگ <?php ?> دستورات رو run میکنه . اینم منبع :
اگه به اين صورتي که شما نوشتيد باشه، حق با شماست اما اينطوري که ميشه همون کد php بين تگ هاي html!

البته من با صحبت شما مبني بر اينکه اين دستور، براي آپاچي عمل خيلي سنگيني هست زياد موافق نيستم، البته توصيه نميشه که از يک قطعه کد خيلي طولاني (مثلا بيش از 1000 خط) از اين روش استفاده بشه، ولي براي موردي که من عرض کردم مناسب هست چرا که تعداد متغيرها هم آنقدر زياد نيست در يک تمپليت که موجب بشه بار زيادي روي سرور به اجرا در بياد.
 

parsiteam

Member
اگه به اين صورتي که شما نوشتيد باشه، حق با شماست اما اينطوري که ميشه همون کد php بين تگ هاي html!

البته من با صحبت شما مبني بر اينکه اين دستور، براي آپاچي عمل خيلي سنگيني هست زياد موافق نيستم، البته توصيه نميشه که از يک قطعه کد خيلي طولاني (مثلا بيش از 1000 خط) از اين روش استفاده بشه، ولي براي موردي که من عرض کردم مناسب هست چرا که تعداد متغيرها هم آنقدر زياد نيست در يک تمپليت که موجب بشه بار زيادي روي سرور به اجرا در بياد.
ممنون . منم قانع شدم . کوچیک شما .
 

جدیدترین ارسال ها

بالا