گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

دانلود راحت با قابلیت Resume بخصوص برای فایل های بزرگ بدون دخالت PHP

نویسنده:
29 سپتامبر 15

خیلی مواقع برای دانلود فایل نیاز هست از طریق PHP و بدون در اختیار گذاشتن لینک مستقیم امکان دانلود را برای کاربر فراهم کنیم اینطوری :

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="PATH_TO_FILE"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: FILE_SIZE');
readfile("PATH_TO_FILE");
exit;

اما مشکل اون موقع پیش میاد که حجم فایل زیاد باشه و نیاز به resume باشه که البته اون را هم میشه با PHP حلش کرد و شاید یک نمونه را در آینده پُست کردم ولی راهکاری که میخوام براتون توضیح بدم به نظرم خیلی بهتره چون کل پروسه دانلود را میندازیم گردن Apache و کار خیلی تمیز تر و بهتر انجام میشه.

دانلود x-sendfile

در‌واقع میخوایم از ماژول x-sendfile که توی وب سرور های مختلف مثل apache و nginx و litespeed فرق میکنه استفاده کنیم. من فرض میکنم شما روی دبیان و وب سرور Apache میخواین نصبش کنید.

برای نصب ماژول باید از دستور apxs استفاده کنیم که ممکنه روی سیستم نصب نباشه و با دستور زیر میتونیم نصبش کنیم :

apt-get install apache2-dev

حالا سورس ماژول را از https://tn123.org/mod_xsendfile و بخش دانلود میگیریم و آرشیو را باز میکنیم و با دستور زیر ماژول را نصب میکنیم :
[doce]
sudo apxs -cia mod_xsendfile.c
[/code]
تا اینجا ماژول را نصب کردیم ولی باید برای سایت یا کل سرور فعال کنیم که میتونیم این کار را توی فایل httpd.conf یا apache2.conf یا از طریق htaccess. انجام بدین که من این آخری را ترجیح میدم. مثلاً دانلود را از طریق فایل xdownload.php انجام میدم پس توی htaccess. مینویسم :

<Files xdownload.php>
	XSendFile on
</Files>

آخرین کاری که باید انجام بدیم اینه که تعیین کنیم Apache برای Header های X-Sendfile به کدام دایرکتوری رجوع کنه که حتماً باید توی فایل‌های config سرور یا سایت این کار را انجام بدیم :

<VirtualHost *:80>
        ServerAdmin webmaster@domain.com
        ServerName www.domain.com
        DocumentRoot /path/to/www
        XSendFilePath /path/to/www/xdownload

	... other stuff
</VirtualHost>

همونطور که میبینید من برای سایتم یک دایرکتوری xdownload در نظر گرفتم و فایل‌هایی که میخوام دانلود کنم را میریزم توی اون دایرکتوری. شما با توجه سایت خودتون میتونید هر دایرکتوری را در نظر بگیرین.

حالا با دستور زیر apache را ریست میکنیم :

sudo service apache2 restart

و با بهترین روش ممکن فایل را برای دانلود عرضه میکنیم :

header("X-Sendfile: xdownload/file.ext");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=file.ext");
exit;

اینکه اشاره کردم با دبیان انجام میدم برای این بود که دستور هایی مثل apt-get را با دبیان مینویسم وگرنه هیچ اهمیتی نداره از چه لینوکسی استفاده میکنید و فقط باید سرویس دهنده شما apache باشه.

نصب و حذف برنامه ها در Ubuntu

نویسنده:
18 سپتامبر 14

معمولاً خیلی‌ها که در Ubuntu تازه کار هستند برنامه‌ها را از Software Center نصب و حذف میکنند و شاید خیلی در مورد دستورات نصب و حذف برنامه‌ها یا پکیج ها نمیدونند. اما مواقعی پیش میاد که ما میخوایم برنامه‌ها را با دستوارت نصب یا حذف کنیم که از apt یا Advanced Package Tool استفاده میکنیم ، توی این پست از دو تا دستور این پکیج یعنی apt-cache و apt-get استفاده میکنیم.

Ubuntu و دیگر توزیع‌های لینوکسی از Repository ها یا مخازن برای نگهداری برنامه‌ها و در اشتراک گذاری اونها برای کاربران استفاده میکنند. نمیخواهم در مورد مخازن صحبت کنم ولی مثلاً اگه بخواهیم توی مخازنی که سیستم ما میشناسه دنبال برنامه یا package ی بگردیم از دستور زیر استفاده میکنیم :

apt-cache search [regex]

مثلاً میشه دنبال پکیج های مرتبط با php گشت :

apt-cache search php

حالا که پکیج مورد نظر را پیدا کردیم و میخوایم نصبش کنیم از دستور apt-get استفاده میکنیم :

apt-get install [package name]

پس جستجوی پکیج ها و نصبشون اصلاً کار سختی نیست. اما ممکنه پس از مدتی بخواهیم پکیجی را حذف کنیم. این را باید بدونیم که هر پکیجی شامل سه وابستگی هست ، خودش ، فایل‌های تنظیمات یا همون config و dependency ها یا پکیج های وابسته. پس ما دستوری نیاز داریم که خود پکیج و تنظیماتش را حذف کنه و dependency های اضافه نصب شده یا همون Orphaned Package ها را هم حذف کنه. شما با این دستور میتونید این کار را انجام بدین :

sudo apt-get --purge autoremove [package name]

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

مهاجرت به لینوکس | نصب و راه اندازی سرویس های مورد نیاز یا همون LAMP

نویسنده:
10 ژوئن 14

پیرو نوشته‌ای که با عنوان «مهاجرت به لینوکس | اوبونتو در کنار ویندوز» منتشر کردم. در چهارمین مرحله و پس از نصب سیستم عامل حالا نوبت میرسه به اینکه سرویس های مورد نیاز یک برنامه نویس وب را نصب کنیم. این سرویس ها شامل سرویس دهنده وب یعنی Apache ، زبان برنامه نویسی سمت وب یعنی PHP و پایگاه داده MySQL می‌شود که روش نصب هر کدام را توضیح می دهم.

قبل از شروع به نصب سرویس های مورد نیاز باز هم یاد آوری می‌کنم که بهتره ابتدا در مورد سیستم عامل جدید یعنی Ubuntu Linux آشنایی متوسطی پیدا کنید تا بتونین دستورات را اجرا کنین و فایل‌های تنظیمات را ویرایش و کار های مرتبط را انجام بدین. بهتره عجله نکنید و چند هفته‌ای را برای یادگیری سیستم عامل جدید وقت بگذارید. همیشه میتونین سؤالات خودتون را توی انجمن فارسی کاربران اوبونتو بپرسین تا دوستان من و شاید خود من در اون انجمن شما را راهنمایی کنن.

Apache
توی لینوکس سرویس دهنده های زیادی هست که میشه نصب کرد ولی من Apache را ترجیح میدم و نصب و راه اندازی Apache را توضیح میدم. برای نصب Apache توی Ubuntu و پس از زدن Ctrl + Alt + T و نمایان شدن ترمینال میزنیم :

sudo apt-get install apache2

ممکنه در زمان نصب یک Wizard ازتون سؤالاتی در مورد domain یا port یا هر تنظیماتی بپرسه که میتونید مقادیر پیش‌فرض را قبول کنین و یا اگه میدونین دارین چیکار میکنین اونها را مطابق خواسته خودتون تغییر بدین. بعد از نصب Apache اگه توی آدرس مرورگر خودتون (ترجیحاً Firefox ;)) بزنین http://localhost صفحه پیش‌فرض Apache را مشاهده میکنین که نوشته !It Works. مسیر پیش‌فرض Apache برای این وب سایت هم var/www/ هستش و میتونین فایل‌های html یا php و … را توی این پوشه بریزین دقیقاً مثل زمانی که فایل‌ها را از طریق FTP به وب سایت منتقل میکنین.

توجه : Apache نرم‌افزار بسیار قدرتمندی هستش و تنظیمات و امکانات بسیاری داره ، توی این پست مجال توضیح نیست و من به مرور زمان مطالب مرتبط با Apache مثل نحوه ساخت Virtual Host ،‌ تنظیمات مربوط به پیکربندی و … را توی پست های جداگانه خواهم نوشت.

PHP
پس از نصب Apache حالا باید PHP را نصب کنیم و این کار را با دستور زیر انجام میدیم :

sudo apt-get install php5 php5-mysql

بعد از نصب بر خلاف ویندوز که باید Apache را برای استفاده از PHP تنظیم میکردیم نیازی به هیچ تنظیماتی نیست و فقط کافیه سرویس Apache را با دستور زیر Reset کنید :

sudo service apache2 raload

حالا اگه یک فایل php در مسیر var/www/ بسازین و توش بنویسین ;()phpinfo و به نام phpinfo.php ذخیرش کنید و به آدرس http://localhost/phpinfo.php برین میتونید تمام تنظیمات و اطلاعات مرتبط با php را ببینین و مطمئن بشین همه چیز درست کار میکنه. آدرس فایل php.ini بارگزاری شده را هم میتونید ببینید و اگه نیاز هست تغییرات لازم را توش اعمال کنید. (فقط یادتون نره باید apache را rest کنید)

توجه : php دارای extension های زیادی هست مثل gd یا mcrypt یا pdo ،‌ ما در زمان نصب php5-mysql که یک extension برای ارتباط از طریق php با mysql هست را نصب کردیم. شما میتونید extension های دیگری را بر اساس نیازتون نصب کنین. برای پیدا کردن extension مورد نظر توی repo ها از دستور زیر استفاده کنید :

sudo apt-cache search php5-

MySQL
برای نصب پایگاه داده MySQL از دستور زیر استفاده میکنیم :

sudo apt-get install mysql-server

در فرآیند نصب ، گذرواژه ای که برای root در نظر میگیرین را حتماً به خاطر بسپارید تا در زمان استفاده مشکلی براتون پیش نیاد.

خوب بالاخره ما LAMP یا همون Linux, Apache, MySQL, PHP را نصب کردیم و میتونیم شروع به برنامه نویسی تحت وب کنیم. در پست بعدی مهاجرت به لینوکس ، به معرفی نرم‌افزار های جایگزین و مورد نیاز در برنامه نویسی وب و توسعه وب سایت‌ها می پردازم.

مهاجرت به لینوکس | نصب اوبونتو در کنار ویندوز

نویسنده:
22 می 14

پیرو نوشته‌ای که با عنوان «مهاجرت به لینوکس | کدام توزیع ؟» منتشر کردم. در سومین مرحله و بعد از انتخاب Ubuntu به عنوان توزیع مورد نظر و دانلود اون از سایت سازنده ، در نظر دارم تا آموزش بدم چطور Ubuntu را در کنار ویندوز نصب کنیم. قطعاً مدتی زمان میبره تا شخص خودش را با سیستم عامل جدید وفق بده و به‌ قدری در استفاده از اون مهارت کسب کنه که سیستم عامل قبلی یعنی ویندوز را کلاً بی خیال بشه و شاید برای پشتیبانی از پروژه های قبلی اون را نگه داره یا توی یک VM (بخوانید ماشین مجازی) نصبش کنه.

توجه : من بار ها با همین روشی که توضیح خواهم داد سیستم عامل Ubuntu را در کنار ویندوز نصب کردم ، ولی از اونجا که نیازمند به تغییراتی در پارتیشن های هارد دیسک هست ، عقل سلیم حکم میکنه که یک Backup از اطلاعات مهم بگیرید.

خوب ما آخرین نسخه Ubuntu (ترجیحاً LTS یا همون «با پشتیبانی دراز مدت») را از سایتش دانلود کردیم و اون را روی یک CD یا DVD به قول معروف Write یا صحیح‌تر Burn کردیم. در این مرحله CD را توی Drive قرار میدیم و سیستم را ریست میکنیم. از اونجا که Ubuntu به صورت Bootable و Live CD هستش. سیستم عامل بدون نیاز به نصب اجرا میشه و سیستم بالا میاد. ما میتونیم بدون نصب سیستم عامل اون را تست کنیم و مطمئن بشیم که همه سخت‌افزار ما را شناخته و کلاً یک بررسی جامع قبل از نصب داشته باشیم.

مهمترین و اصلی‌ترین بخش از نصب Ubuntu ساماندهی پارتیشن ها هستش. به نظر من بهترین روش برای اختصاص پارتیشن های لینوکس حالت سه پارتیشنی هستش یعنی Root , Home , Swap (از چپ بخوانید!) که فایل‌های سیستمی لینوکس توی Root قرار میگیره ، فایل‌های برنامه‌ها ، فیلم ، موسیقی و غیره توی Home قرار میگیره و Swap هم که در موارد مرتبط با Ram مثل زمانی که Ram کم میاد و … (از حوصله این مطلب خارجه) کاربرد داره.

قطعاً سناریو های متفاوتی برای پارتیش های شما وجود داره و من نمیتونم برای تک به تک اونها مثال بزنم. اما فرض را بر این میگذاریم که شما کلاً میدونین پارتیشن های Primary و Extended و Logical چی هستند که اگه نمیدونین باید اول در مورد اونها کمی اطلاعات به دست بیارین. و فرض دوم هم بر این میگذاریم که شما دو تا پارتیشن دارین یکی پارتیشن مربوط به ویندوز یکی هم پارتیشن مربوط به فایل‌های مولتی مدیا مثل عکس و فیلم و بازی و موسیقی و غیره. ویندوز روی یک Primary پارتیشن نصب شده و پارتیشن مولتی مدیا شما یا روی Primary هست و یا روی Extended که شامل یک Logical پارتیشن شده. از اونجا که بیشترین فضا به پارتیشن مولتی مدیا شما اختصاص داده شده . ما نیاز داریم تا فضای مورد نیاز برای پارتیشن های لینوکس را که من مجموعا ۵۰ گیگ در نظر میگیرم (البته میتونید کم یا زیادش کنین) را از پارتیشن مولتی مدیا فعلی تأمین کنیم.

ما برای دستکاری پارتیشن ها از ابزار Gparted توی Ubuntu استفاده میکنیم. این ابزار را میتونید با زدن Ctrl-D و تایپ gparted و زدن Enter اجرا کنید.من قصد ندارم در حال حاضر ابزار Gparted را آموزش بدم و شاید در نوشته‌های آتی اون را معرفی و آموزش دادم.

اگر فرض را بر این بگذاریم که پارتیشن مولتی مدیا ویندوز از نوع Primary هستش کافیه با استفاده از Gparted اون را Shrink یا کوچیک کنیم تا فضای خالی مثلاً به اندازه ۵۰ گیگ آزاد بشه و بعدش توی اون فضای خالی یک پارتیشن ۵۰ گیگی از نوع Extended بسازیم و سه پارتیشن لینوکس را از نوع Logical توی اون پارتیشن Extended ایجاد کنیم.

اگر فرض را بر این بگذاریم که پارتیشن مولتی مدیا ویندوز از نوع Logical و توی یک Extended باشه. کافیه اون پارتیشن Logical را به اندازه مثلاً ۵۰ گیگ کوچیک کنیم و ۳ تا پارتیشن Logical مربوط به لینوکس را توی فضای خالی شده اون پارتیشن Extended ایجاد کنیم.

حجم پارتیشن های لینوکسی را میشه برای Root به اندازه ۱۰ گیگابایت ، برای Swap به اندازه Ram (مثلاً ۴ گیگ برای رم ۴ گیگی) ، مابقی هم برای Home در نظر بگیریم.حالا میتونید تغییرات را توی Gparted اعمال کنید و منتظر بشین تا عملیات کامل بشه.

حالا روی آیکون Install کلیک میکنیم تا پنجره نصب باز بشه. پس از انتخاب زبان باید برای برنامه نصب مشخص کنیم از کدام پارتیشن ها استفاده کنه. پس روی «انتخاب دستی پارتیشن ها» کلیک میکنیم. و نوع پارتیش ها را با انتخاب آن‌ها (Mount Point) تعیین میکنیم.(Root همون / هستش).

حالا با ادامه دادن به Wizard به راحتی Ubuntu را نصب می کنیم.

بعد از نصب Ubuntu به جای Windows Bootloader حالا Bootloader ی به نام Grub جایگزین شده تا انتخاب کنید کدام سیستم عامل Boot بشه. نصب که تمام شد با ریست کردن و انتخاب Ubuntu از Bootloader به راحتی Ubuntu بالا میاد و کار نصبش تموم شده.

حالا باید مطمئن بشیم که Windows هم به راحتی Boot میشه و بالا میاد. اما چرا ممکنه نیاد ؟ به خاطر اینکه بعد از Repartitioning احتمال داره که Filesystem مربوط به Windows دچار مشکل یا به هم ریختگی شده باشه که احتمالش هم کم نیست. پس اگه بعد از انتخاب Windows از منوی Grub خطایی گزارش شد و Windows بالا نیومد نگران نشین. کافیه CD مربوط به ویندوز را بگذارین توی Drive و پس از Boot شدنش به Setup برین و از گزینه Repair your system و در صورت عدم توفیق از دیگر گزینه های Repair And Recovery Tools استفاده کنید.

پ.ن : اگه خودتون در پارتیشن کردن کامپیوترتون برای ویندوز یا نصب خود ویندوز نقشی نداشتین نباید از عدم توفیق در نصب لینوکس یا متوجه نشدن موضوعات مطرح شده در این نوشته از نصب Ubuntu بگذرین. همونطور که کامپیوتر شما را برای ویندوز شخص دیگری پارتیشن بندی کرده یا کلاً ویندوز را نصب کرده. سعی کنید توی سایت‌هایی مثل انجمن فارسی اوبونتو یک همشهری یا حتی هم‌محله‌ای پیدا کنید و علاوه بر حل مشکل نصب اوبونتو از هم موضوعات مختلفی را یاد بگیرین. جامعه علاقه‌مندان به نرم‌افزار آزاد بسیار اجتماعی و فعال در کمک به دیگران هستند. پس نگران نباشید!

توجه : بسیاری از بخش‌های این نوشته به استناد از مطلب سایت Dedoimedo با عنوان How to install windows 7 and ubuntu side by side نوشته شده است. اگرچه موضوعات مطرح شده همگی تجربه شخصی و عملی این جانب می باشند.

در پست بعدی مهاجرت به لینوکس در مورد نصب سرویس های مورد نیاز برای برنامه نویسی و توسعه وب یا همون LAMP خواهم نوشت.