PDA

View Full Version : مبتدی: نحوه کامپایل شده زبان php و تفسیر آن توسط مرورگرها



s.hoseinpoor
سه شنبه 20 فروردین 1392, 22:46 عصر
سلام دوستان
فک کنم روی سوال از عنوان تاپیک مشخص باشه.

اگه لطفا منبعی دارید یا توضیحاتی کاملی ارائه بدین

ممنون.

MMSHFE
سه شنبه 20 فروردین 1392, 22:53 عصر
دوست عزیز، PHP یک زبان کامپایلی نیست، بلکه تفسیری هست. نحوه کار هم به این ترتیبه:
1- کاربر توی مرورگر با تایپ آدرس، یک صفحه وب رو درخواست میکنه.
2- ازطریق پروتکلهای شبکه و مسیریابیها و جدول DNS و... کامپیوتری که فایل مربوطه روی اون قرار داره، شناسایی و IP اون مشخص و درخواست به اون کامپیوتر ارسال میشه.
3- اگه هاست اشتراکی باشه، آدرس درخواست شده هم به کامپیوتر مربوطه فرستاده میشه تا بدونه فایل مربوط به کدوم سایت رو باید اجرا کنه.
4- درخواست همراه با آدرس، به نرم افزار Web Server که میتونه IIS یا Apache و... باشه، ارسال میشه و این برنامه ازطریق پسوند (مثلاً php.) متوجه میشه که یک فایل PHP درخواست شده.
5- وب سرور دنبال فایل میگرده و اگه نبود، پیغام خطای 404 رو بعنوان نتیجه برمیگردونه یا اگه سطح دسترسی طوری بود که درخواست مجاز نبود، خطای 403 و... و به همین ترتیب خطای مناسب رو برمیگردونه ولی اگه فایل وجود داشت و مشکلی در دسترسی بهش نبود، برنامه مفسر PHP رو اجرا میکنه و فایل رو بعنوان پارامتر در اختیارش میگذاره تا تفسیرش کنه و خروجی مناسب رو تولید کنه و به وب سرور تحویل بده.
6- وب سرور خروجی تفسیرشده PHP رو که عموماً ترکیبی از HTML و CSS و زبانهای اسکریپت نویسی سمت کلاینت هست، بعنوان پاسخ در جواب درخواست کلاینت، برای مرورگرش میفرسته.
7- مرورگر این اطلاعات رو میگیره و به کاربر به شکل مناسب نشون میده.
اگه جایی ابهامی بود بفرمایید تا بیشتر توضیح بدم.

ravand
چهارشنبه 21 فروردین 1392, 08:16 صبح
6- وب سرور خروجی تفسیرشده PHP رو که عموماً ترکیبی از HTML و CSS و زبانهای اسکریپت نویسی سمت کلاینت هست، بعنوان پاسخ در جواب درخواست کلاینت، برای مرورگرش میفرسته.
منظورتون این هست که php خروجی html تولید میکنه؟ :متفکر:

MMSHFE
چهارشنبه 21 فروردین 1392, 08:45 صبح
بله. شما با PHP یک سند HTML میسازین و برای کلاینت میفرستین. درواقع شما هرچیزی بخواین میتونید برای کلاینت بفرستین ولی کلاینت که در 99٪ موارد یک مرورگر هست، چیزی بجز HTML رو متوجه نمیشه و با همه چیز از دید قوانین HTML برخورد میکنه. مثلاً اگه توی خروجی شما کدهای PHP باشه، اونها رو توی صفحه نشون نمیده ولی به همون شکل دست نخورده توی سورس کد وجود خواهد داشت. شما اگه براش بفرستین salam اونم مینویسه salam ولی اگه بفرستین <b>salam</b> اون مینویسه salam

ravand
چهارشنبه 21 فروردین 1392, 08:59 صبح
بله . من این چیزی که شما گفتید رو توی مقالات مختلفی خونده بودم. ولی به نظرم اگه بگیم php یک نوع ارتباط با html برقرار میکنه بهتره. این نظر شخصی منه . شاید از بی تجربگی این حرف رو میزنم . و یه سری مطالب رو نمیدونم. ولی فکر میکنم php یک ارتباطی با html برقرار میکنه که بیاد یه سری کارها رو برای html انجام بده که خودش به تنهایی نمیتونه انجام بده و برعکس. مثلا در کد زیر:

<?php
echo "<b>salam</b>";
?>
هم کد php به کار رفته و هم html .
نظرتون چیه؟

eshpilen
چهارشنبه 21 فروردین 1392, 10:50 صبح
3- اگه هاست اشتراکی باشه، آدرس درخواست شده هم به کامپیوتر مربوطه فرستاده میشه تا بدونه فایل مربوط به کدوم سایت رو باید اجرا کنه.
کاری به اشتراکی بودن یا نبودن هاست نداره؛ اصلا مرورگر از کجا میدونه هاست اشتراکیه یا نه؟
هدر Host که محتوی نام دامین وارد شده در آدرسبار مرورگر است، در پروتکل HTTP 1.1 همیشه ارسال میشه.

eshpilen
چهارشنبه 21 فروردین 1392, 10:54 صبح
بله . من این چیزی که شما گفتید رو توی مقالات مختلفی خونده بودم. ولی به نظرم اگه بگیم php یک نوع ارتباط با html برقرار میکنه بهتره. این نظر شخصی منه . شاید از بی تجربگی این حرف رو میزنم . و یه سری مطالب رو نمیدونم. ولی فکر میکنم php یک ارتباطی با html برقرار میکنه که بیاد یه سری کارها رو برای html انجام بده که خودش به تنهایی نمیتونه انجام بده و برعکس. مثلا در کد زیر:

<?php
echo "<b>salam</b>";
?>
هم کد php به کار رفته و هم html .
نظرتون چیه؟
ارتباط یعنی چی؟
PHP زبانی است که سمت سرور اجرا میشه و میتونه از امکانات سمت سرور مثل دیتابیس و برنامه نویسی استفاده کنه.
برنامه نویس وقتی میخواد خروجی به مرورگر بفرسته طبیعتا باید به زبان HTML+JS+CSS و غیره که برای مرورگر قابل فهم/اجرا است بفرسته.
همین.
البته یکسری توابع و امکانات توی PHP هست طبیعتا که برای کار کردن با HTML است. مثلا تابع htmlspecialchars و خیلی توابع دیگر.
واقعا منظورت معلوم نیست چیه دقیقا.
در سمت مرورگر هیچ چیزی نیست که PHP انجام بده. همه کار با همون HTML+JS+CSS و فلش و غیره انجام میشه. PHP فقط مربوط به کارهای سمت سرور میشه که فایلهای استاتیک HTML در سمت سرور قادر به انجامشون نیستن طبیعتا.

MMSHFE
چهارشنبه 21 فروردین 1392, 12:01 عصر
ولی به نظرم اگه بگیم php یک نوع ارتباط با html برقرار میکنه بهتره.
نه دوست عزیز اینطور نیست. ببینید، PHP یک خروجی آماده میکنه که باید تحویل مرورگر داده بشه. حتی در کد زیر هم PHP هیچ کاری بجز تولید محتوا انجام نمیده:


<!doctype html>
<html>
<head>
<title>HTML, CSS, JS and PHP</title>
<meta charset="utf-8" />
<style type="text/css">
* {
font-family: Tahoma;
font-size: <?php echo rand(10, 16); ?>pt;
}
</style>
<script type="text/javascript">
function message() {
alert("<?php echo (isset($_POST['name']) ? 'Welcome ' . $_POST['name'] : 'Enter your name'); ?>");
}
</script>
</style>
<html>
<body onload="message();">
<?php
if(isset($_POST['name'])) {
echo '<p>Welcome ' . htmlentities($_POST['name'], ENT_QUOTES, 'utf-8') . '</p>' . PHP_EOL;
} else {
?>
<form action="" method="post">
<label>Name: <input name="name" type="text" /></label>
<input type="submit" value="Send" />
</form>
<?php
}
?>
</body>
</html>
توی کد فوق، اون چیزی که واقعاً فونت رو داره تنظیم میکنه، CSS و اون چیزی که ساختار صفحه رو مشخص کرده، HTML و اون چیزی هم که پیغام رو داره نشون میده، JS هست. حالا این وسط PHP یکسری شرط گذاشته که مثلاً اگه فلان شرط برقرار بود، فلان کد بره برای کلاینت. حتی توی دستوراتی هم که خارج از تگ PHP هست، این قضیه صدق میکنه. یعنی چون پسوند فایل php. هست و مفسر PHP داره فایل رو تفسیر میکنه، هر چیزی که خارج از تگ PHP باشه رو درست مثل وقتی که داخل تگ PHP با دستور echo نوشته باشین، توی خروجی سر جای خودش قرار میده. وقتی هم که خروجی نهایی آماده شد، تحویل وب سرور داده میشه تا بفرسته برای مرورگر کلاینت.

s.hoseinpoor
چهارشنبه 21 فروردین 1392, 23:42 عصر
خیلی ممنون...
من زمینه اصلیم asp.net هست ولی به این اطلاعات درباره php نیاز دارم

1- در مورد روش کار مفسر php اگه ممکنه کمی توضیح بدین
2- سرعت تفسیر php بیشتره یاکامپایل asp.net؟ آیا به وب سرور بستگی داره؟ به چی؟! ی

s.hoseinpoor
چهارشنبه 21 فروردین 1392, 23:47 عصر
لطفا در مورد انتقال داده و سرعت انتقال داده هم کمی توضیح بفرمایید
----

سیر تکامل و توسعه php چطور بوده؟ ایا با ورژن هایی مختلفی بوده یا چون اپن سورسه هرگروهی مث نسخ لینوکس روش کار کرده؟!! تا اونجا که من میدونم قبلا یه tool بوده و بعد زبان شده...

MMSHFE
پنج شنبه 22 فروردین 1392, 08:01 صبح
1- در مورد روش کار مفسر php اگه ممکنه کمی توضیح بدین
2- سرعت تفسیر php بیشتره یاکامپایل asp.net؟ آیا به وب سرور بستگی داره؟ به چی؟! ی
بطور کلی سرعت برنامه هایی که کامپایل میشن بیشتر از برنامه های تفسیری هست ولی از اونجا که در NET. دو مرحله کامپایل داریم (یک مرحله برای تبدیل به MSIL و مرحله بعد موقع اجرا توسط JIT Compiler از MSIL به Native Code) درنتیجه سرعت اجرای اسکریپتهای PHP تاحدودی بیشتره. روش کار مفسر PHP هم پیچیده نیست. ابتدا فایل رو دریافت میکنه و بعد، اون رو Minify میکنه (تمام White-Spaceهای غیرضروری حذف میشن و کل فایل میشه یک خط طولانی) و بعد، تگهای PHP رو پیدا میکنه، کدها رو اجرا میکنه و هرجا دستوراتی مثل echo و print و... بود که یک عبارت رو باید در خروجی نمایش میداد، اون رو درج میکنه. بقیه بخشها هم که خارج از تگ PHP هستن رو مشابه وقتی که داخل تگ PHP هستن و از echo استفاده شده فرض میکنه. یعنی درنهایت کل فایل شما توی تگ PHP قرار میگیره. حالا کدها تفسیر میشن و خروجی موردنظر با کمک echoها و سایر دستورهای چاپ عبارت، تولید میشه و بعنوان نتیجه برگردونده میشه. برای اینکار هم از مفسر PHP (توی ویندوز فایل php.exe و توی لینوکس فایل php در پوشه نصب PHP) استفاده میشه.

لطفا در مورد انتقال داده و سرعت انتقال داده هم کمی توضیح بفرمایید
سیر تکامل و توسعه php چطور بوده؟ ایا با ورژن هایی مختلفی بوده یا چون اپن سورسه هرگروهی مث نسخ لینوکس روش کار کرده؟!! تا اونجا که من میدونم قبلا یه tool بوده و بعد زبان شده...
سرعت انتقال داده ها ارتباطی به زبان نداره و مربوط به پروتکل HTTP و مباحث شبکه است.
درمورد سیر تکاملش هم باید بگم که ابتدا توسط Rasmus Lerdorf (http://toys.lerdorf.com/) طراحی شد و بعد با توجه به استقبال خیلی خوب کاربران، توسعه پیدا کرد و بعد از مدت کوتاهی شرکت Zend تشکیل شد و به پشتیبانی از اون پرداخت و تمام نسخه های اصلی موجود در بازار محصول همین شرکته و هر گروهی یک نسخه خاص بیرون نداده. درواقع درسته که Open Source هست اما اگه نسخه خاصی یا امکانات ویژه ای بهش توسط هر فرد یا گروهی اضافه بشه، برای درج در نسخه اصلی باید یک نسخه رو همراه با مستندات برای شرکت Zend ارسال کنه و درصورت موافقت و سازگاری با تمام بخشها و سودمند بودن اون ویژگی، در نسخه بعدی به اسم خود فرد یا گروه اضافه میشه و اسم اون فرد یا گروه در فهرست Contributors درج خواهد شد.