در آموزش قبل فرا گرفتیم که به چه شکل یک پروژهٔ نوشته شده با PHP را در لوکالهاست اجرا کنیم. گفتیم که برای دستیابی به وب سرور آپاچی نصب شده روی سیستم لوکال خود، میبایست مسیر http://localhost یا http://127.0.0.1 را در آدرسبار مرورگر وارد کنیم.
با این روش میشود به سادگی اقدام به توسعهٔ چندین پروژهٔ مختلف رو سیستم خود کرد اما مشکلی که وجود دارد این است که هر دفعه که بخواهیم به پروژهٔ خود به صورت لوکال دست یابیم، میبایست مسیر localhost را وارد کنیم و این در حالی است که میشود برای پروژههای خود نامهایی دلخواه در نظر گرفت که با وارد کردن نام مد نظر، به سادگی پروژه در مرورگر اجرا گردد و اینجا است که میبایست با مفهومی تحت عنوان Virtual Host (هاست مجازی) آشنا شویم.
به عبارت دیگر، ایجاد یک هاست مجازی به ما این امکان را میدهد تا یک URL دلخواه (مثلاً php-tutorial.dev) در نظر گرفته که با وارد کردن آن، وب سرور آپاچی به پوشهای که کدهای آموزشها داخل آن قرار گرفته ارجاع پیدا کرده و پروژه اجرا گردد (در ادامه، نحوهٔ ساخت هاست مجازی روی سیستمعامل اوبونتو آموزش داده خواهد شد).
برای شروع، نیاز است تا در مسیر var/www/ فولدری با نامی دلخواه (مثلاً sokanacademy-php-course) بسازیم؛ برای این منظور، ترمینال را باز کرده و کامند زیر را وارد میکنیم:
$ sudo mkdir /var/www/sokanacademy-php-course
همانطور که ملاحظه میشود، ابتدا از کامند sudo استفاده کرده زیرا برای ساخت یک دایرکتوری جدید نیاز به پرمیشنهای روت (ادمین سیستمعامل) داریم. سپس از کامند mkdir (که مخفف واژگان Make Directory) است استفاده کرده که این وظیفه را دارا است تا در مسیر در نظر گرفته شده، یک دایرکتوری جدید ایجاد کند. همانطور که میبینیم، ابتدا مسیر var/www/ را نوشته سپس نامی دلخواه همچون sokanacademy-php-course را به عنوان نام پوشهٔ جدید در نظر گرفتهایم.
حال به محض اینتر کردن، ابتدا پسورد روت از ما خواسته میشود؛ سپس به محض درست وارد کردن پسورد، این پوشه در مسیر مد نظرمان ساخته میشود. برای آنکه فایلهای فصول مختلف دوره مرتب و منظم باشند، داخل این پوشه اقدام به ساخت پوشهٔ دیگری تحت عنوان ۰۱ میکنیم:
$ sudo mkdir /var/www/sokanacademy-php-course/01
حال فایل index.php که در آموزش گذشته ساختیم را داخل پوشهٔ ۰۱ کپی میکنیم. مسلماً سیستمعامل چنین اجازهای به ما نخواهد داد چرا که پرمیشنهای کامل به پوشههایی که جدیداً ساختهایم داده نشده است. برای این منظور، کامند زیر را اجرا میکنیم:
$ sudo chmod -R 777 /var/www/sokanacademy-php-course
پرمیشن ۷۷۷ حداکثر پرمیشنی است که میتوانیم به پوشهٔ خود بدیم. آپشن R- هم بدان معنا است که هم پوشهٔ مد نظر و هم کلیهٔ پوشههای زیرشاخهاش هدف قرار داده خواهند شد. دستور chmod هم که به منظور تغییر پرمیشنها است، استفاده میشود. پس از اجرای دستور فوق، به سادگی میتوان هر فایلی را داخل پوشهٔ مد نظر کپی/پیست کرد.
از این پس، داخل پوشهٔ sokanacademy-php-course پوشهٔ دیگری داریم تحت عنوان 01 که داخل آن هم فایلی است تحت عنوان index.php (لازم به ذکر است که در ادامهٔ دوره، به همین منوال پوشههای مرتبط با فصول دوم، سوم الی آخر را خواهیم ساخت و فایلهای فصول را داخل آنها قرار خواهیم داد).
آپدیت کردن تنظیمات وب سرور آپاچی
وب سرور آپاچی فایل پیشفرضی مرتبط با Virtual Host دارد که میتوانین هاستها مجازی را داخل آن تعریف کنیم:
$ sudo gedit /etc/apache2/sites-available/000-default.conf
دستور sudo را از این جهت وارد میکنیم که از پرمیشن لازم برای ویرایش این فایل برخوردار باشیم. برای این کار، از هر نرمافزار ویرایش متنی -همچون nano یا gedit- میتوان استفاده کرد. پس از باز کردن فایل، کدهای زیر را در انتهای آن وارد میکنیم:
<VirtualHost *:80>
ServerName php-tutorial.dev
DocumentRoot /var/www/sokanacademy-php-course/01/
<Directory /var/www/sokanacademy-php-course/01/>
AllowOverride All
</Directory>
</VirtualHost>
در تفسیر ساختار فوق بایستی گفت که هر ریکوئستی که به پورت ۸۰ (پورت پیشفرض پروتکل HTTP) ارسال گردد، این هاست مجازی توسط آپاچی مد نظر قرار داده خواهد شد. برای کلید ServerName، نام URL دلخواه خود -که در این مثال php-tutorial.dev است- را وارد کردهایم؛ در واقع، ServerName نام هاست مجازی ما را در اختیار آپاچی قرار میدهد. برای کلید DocumentRoot هم آدرس پروژه که در مسیر var/www/ قرار دارد را در نظر گرفتهایم؛ به عبارت دیگر، این کلید به مسیر اصلی پروژه اشاره دارد. تگ <Directory> و قرار دادن مقدار All برای کلید AllowOverride داخل آن هم این امکان را در اختیار ویرچوال هاست قرار میدهد تا کلیهٔ فایلهای htaccess. که در آن پوشه و پوشههای زیرشاخه قرار گرفتهاند را به رسمیت بشناسد (البته در حال حاضر هیچگونه فایل htaccess. در نظر گرفته نشده است).
حال در ادامه میبایست اقدام به ویرایش فایل دیگری تحت عنوان hosts کنیم که در مسیر etc/ قرار دارد:
$ sudo gedit /etc/hosts
پس از باز کردن این فایل، در انتهای آن دستور زیر را وارد میکنیم:
127.0.0.1 php-tutorial.dev
فایل را ذخیره کرده و آن را میبندیم. با این کار دستور دادهایم که هر ریکوئستی که به آدرس آیپی 127.0.0.1 یا معادل آن یعنی localhost ارسال گردد، URL دلخواه ما برایش در نظر گرفته شود. حال قاعدتاً اگر به مسیر http://php-tutorial.dev برویم، میبایست پروژه بدون هیچ مشکلی بالا بیاید، اما متأسفانه اینطور نیست! دلیل این مسئله آن است که تغییرات صورت گرفته در فایلهای کانفیگ وب سرور آپاچی اعمال نشدهاند. برای این منظور اگر سیستم ریاستارت شود، تمامی تنظیمات جدید اعمال خواهند شد اما راهکار به مراتب منطقیتر این است که به صورت کامندلاینی آپاچی را ریاستارت کنیم. برای این منظور، کامند زیر را در ترمینال وارد میکنیم:
$ service apache2 restart
پس از وارد کردن پسورد، آپاچی ریاستارت شده و اگر به مسیر http://php-tutorial.dev وارد شویم، خواهیم دید که پروژه بدون هیچ مشکلی بالا خواهد آمد (در واقع، اگر مسیر http://localhost/sokanacademy-php-course/01 را هم وارد سازیم، همان پروژه بالا خواهد آمد).
مشکل مرورگر کروم با دامنههایی که به dev. و foo. ختم میشوند!
از نسخهٔ ۶۳ مرورگر گوگل کروم به بعد، هِدِری تحت عنوان HSTS در نظر گرفته شده است که کلیهٔ دامنههایی که dev. یا foo. باشند را به صورت خودکار از پروتکل HTTP به پروتکل امن HTTPS ریدایرکت میکند و عملاً نمیتوان دست به تعریف هاست مجازی زد (در آموزشهای آتی، بیشتر با مفهوم Header آشنا خواهید شد). در همین راستا، توصیه میشود برای اینکه به مشکلی در این رابطه بر نخورید، نام آدرس انتخابی http://php-tutorial.dev را به http://php-tutorial.local تغییر دهید (لازم به ذکر است که پس از هرگونه تغییر در تنظیمات آپاچی، باید نرمافزار را ریاستارت کرد).