article

محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess

php-htaccess-download

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

دستور htaccess برای جلوگیری از دانلود مستقیم


اگر با فایل htaccess. آشنا باشید، می دانید که با استفاده از آن می توان تنظیمات متفاوتی در سرورهای لینوکس و ویندوز (در صورت پیکره بندی مناسب) اعمال کرد که یکی از این تنظیمات، بررسی لینک درخواستی و محدود کردن حالت دانلود مستقیم آن است، در این شیوه در مرحله اول دستوری در htaccess، با استفاده از الگوی عبارات با قاعده فرمت فایل درخواستی را بررسی کرده، اگر فرمت مورد نظر جزء مواردی باشد که نمی خواهیم به صورت مستقیم دریافت شوند، آن را به صورت پارامتر به یک فایل PHP ارسال می کنیم (این کار در سرور و بدون اطلاع کاربر انجام می شود)، به نمونه زیر توجه کنید.
RewriteEngine on
RewriteRule ^file/([^/]+)(\.zip|\.pdf|\.jpg)$ /limit-direct-access/file/download.php?file=$1$2 [NC,L]
در این مثال ساده، در ریشه یا همان root سایت دایرکتوری با نام فرضی limit-direct-access ساخته ایم که درون آن یک فایل htaccess. با دستورات بالا قرار دارد، همچنین یک فولدر با نام file که درون آن فایل download.php به همراه سایر فایل های آماده برای دانلود جای گرفته اند (با دقت به قسمت دوم دستور RewriteRule، درک ترتیب قرار گرفتن فولدرها ساده می شود)، لذا در حالت عادی کاربر برای دانلود فایل فرضی test.zip از دایرکتوری file باید نمونه لینک زیر را از سرور درخواست کند:
http://localhost/limit-direct-access/file/test.zip
اما با توجه به دستور RewriteRule نوشته شده، کاربر بدون اینکه متوجه شود، لینک زیر را از سرور درخواست خواهد کرد:
http://localhost/limit-direct-access/file/download.php?file=test.zip
در واقع لینک اصلی برای سرور مفهوم لینک Rewrite شده را دارد.

بررسی مجوزها و ارسال فایل برای دانلود با PHP


قسمت اول کار که تغییر مسیر لینک کاربر از حالت مستقیم به غیر مستقیم بود به درستی انجام شد! حال نوبت PHP است که کار بررسی مجوزهای ورود، پرداخت و... را انجام دهد و در صورتی که شرایط باب طبع ما باشد، فایل را به مرورگر جهت دانلود ارسال کند، به نمونه زیر توجه کنید.
<?php
@$file_name = $_GET['file'];
//echo $file_name;

//بررسی مجوزهای کاربر
//تعیین نحوه بررسی مجوزها با توجه به برنامه و هدف شما می تواند متفاوت باشد، به طور مثال ممکن است هنگامی که کاربر مبلغ لینک را پرداخت کرده و تراکنش موفقیت آمیز باشد، ضمن نگهداری اطلاعات در دیتابیس جهت استفاده های بعدی، یک سشن آی دی تنظیم کنید، اکنون در هنگام دانلود می توان آن سشن آی دی را بررسی کرد و اگر تنظیم شده باشد، اجازه دسترسی به کاربر داد، یا برای کاربران وارد شده به سایت از همین شیوه می توان استفاده نمود.
$user_access = TRUE;

//کاربر مجاز به دانلود است
if($user_access == TRUE){
    //تابع برای بدست آوردن پسوند فایل
    function getExtension($file){
        preg_match('/\.[^\.]+$/i', $file, $ext);
        return $ext[0];
    }
    
    //نوع فایل    
    $file_type = NULL;
    switch(getExtension($file_name)){
        case 'zip':
        $file_type = 'application/zip';
        break;
        case 'pdf':
        $file_type = 'application/pdf';
        break;
        case 'jpg':
        $file_type = 'image/jpeg';
        break;                
    }
    
    //ارسال فایل به مرورگر برای دانلود
    ob_start();
    header('Content-Description: File Transfer');
    //header('Content-Type: application/octet-stream');    
    header('Content-Type: '.$file_type);
    header('Content-Disposition: attachment; filename='.$file_name);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: '.filesize("$file_name"));
    ob_clean();
    flush();
    readfile("$file_name");
    exit;
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>وبگو | محدود کردن دسترسی مستقیم به لینک دانلود</title>
<!-- https://webgoo.ir -->
</head>
<body>
<?php
//کاربر مجاز به دانلود نیست
if($user_access == FALSE){
    echo 'Error!';    
}
?>
</body>
</html>
توضیح:
- همان طور که گفتیم نام فایل به صورت یک پارامتر و از طریق متد GET به فایل PHP ارسال می شود، بنابراین در خط اول متغیر file_name را با این روش مقداردهی می کنیم (که برابر با مقادیر دریافتی از پارامتر file است).
- در گام بعدی نیاز به بررسی مجوز دانلود کاربر است، نحوه انجام این مرحله کاملا دلخواه بوده و بستگی به هدف شما دارد، آنچه برای ما اهمیت دارد، مقداردهی متغیر user_access به صورت TRUE یا FALSE است، به طور مثال می توانید برای کاربرانی که تراکنش آنها موفقیت آمیز باشد، یک سشن آی دی تنظیم کنید یا فیلدی را در دیتابیس به صورت حالت پرداخت تعریف کرده و با تطبیق اطلاعات (نام کاربری و کلمه عبور)، وضعیت مجوز دانلود کاربر را بررسی کنید، در هر صورت از هر روشی که استفاده کنید نهایتا باید به نتیجه TRUE یا FALSE ختم شود، لطفا به جهت مفصل بودن این مبحث، در این رابطه به آموزش های سشن و نحوه ایجاد سیستم ورود و خروج سایت مراجعه کنید.
- پس از تعیین حالت TRUE یا FALSE برای متغیر user_access، در صورتی که مقدار TRUE باشد، یعنی کاربر مجاز به دانلود بوده و لذا باید فایل را به مرورگر ارسال کنیم، بدین منظور هم می توانید از دستور زیر برای تعیین نوع MIME فایل استفاده کنید.
header('Content-Type: application/octet-stream');
این دستور به صورت کلی است و برای اکثر فایل ها کاربرد دارد، هم می توانید به صورت اختصاصی نوع MIME فایل ها را با تابع getExtension و دستور switch مشخص کنید (این کار در نمونه کد آموزش حاضر انجام شده است).
نکته: MIME یک استاندارد تعریف شده در وب برای تعیین فایل های مختلف از نظر نوع است که می توانید لیستی از آنها را در لینک زیر مشاهده کنید.
لیست فرمت ها و معادل آنها در استاندارد MIME
- دستورات header که در ادامه تنظیم شده اند برای ارسال صحیح فایل به مرورگر و رعایت استانداردهای HTTP لازم هستند.
- تابع ob_clean و flush برای مدیریت بهتر نقل و انتقال اطلاعات و پاک کردن موارد اضافی از سرور است (ضروری نیست).
- در نهایت نیز تابع readfile فایل مورد نظر را به مرورگر ارسال کرده و دستور exit باعث پایان اجرای کدها می شود.
نکته 1: در صورتی که مقدار متغیر user_access برابر FALSE باشد، بخش دوم دستورات اجرا شده و پیغام Error نمایش داده می شود.
نکته 2: دقت کنید که به دلیل استفاده شدن از توابع header در کد، نباید قبل از اجرای این توابع هیچ نوع خروجی به مرورگر ارسال شود، این خروجی می تواند شامل BOM یا Byte Order Mark نیز شود، لذا باید مطمئن شوید که فایل PHP شما بدون BOM است که بدین منظور می توانید از برنامه Adobe Dreamweaver یا ++Notepad استفاده کرده و BOM را با ذخیره مجدد فایل حذف کنید (در نرم افزار ++Notepad باید از منوی Encoding و امکان Convert to UTF-8 without BOM استفاده کنید).

دانلود نمونه فایل های آموزش


دانلود نمونه فایل های آموزش محدود کردن  لینک دانلود مستقیم فایل ها با PHP و htaccess
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
» ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
» نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
» نمایش قسمتی از متن و پاراگراف با PHP
» نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
commentنظرات (۱۱۱ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: محمد حسین
۲۳:۲۶ ۱۳۹۳/۰۲/۰۷
طبق معمول کم نظیر و کاربردی...
نویسنده: محمد
۱۴:۲۴ ۱۳۹۳/۰۲/۰۸
صلوات بعد از مدت ها ....
خیلی عالی
نویسنده: علی
۱۴:۲۷ ۱۳۹۳/۰۲/۱۵
خوب
نویسنده: علی
۰۱:۰۵ ۱۳۹۳/۰۲/۲۱
کار نمیکنه!!!!!!!!!!!
پاسخ: 
کد تست شده، لطفا اگر با مشکل خاصی مواجه شده اید با ذکر جزئیات عنوان کنید تا بررسی کنیم.
نویسنده: علی
۱۶:۰۰ ۱۳۹۳/۰۲/۲۱
سلام وقت شما به خیر.
از زحمتتون بسیار ممنونم.
من فایل های مربوطه رو دانلود کردم اما وقتی اجرا میکنم و آدرس بار http://localhost/limit-direct-access/file/test.zip میزنم بازم دانلود میشه!!!!!!!!!!!!!!
با توجه به اینکه در index وقتی وارد سایت میشه
$_SESSION["loginOk"] = 'yes'; 
رو انجام میده بعدم با یه دستور if در صفحه download.php بررسی میکنه اگر seesion برای login ست شده بود و yes بود بعد
$user_access = TRUE;
رو انجام میده ....
اما بازم مشکلی که گفتم داره!!!!!!!!!!!!
احتمالا اشتباه از منه اما اگه لطف کنید و یه صفحه index هم با یه شرطی (یه جلسه ای خاص) بذارین ممنون میشم
پاسخ: 
سلام
بحث سشن مربوط به مبحث دیگری است، لذا لطفا اگر مشکلی وجود دارد و قادر به حل آن نیستید، فایل ها را به صورت ZIP به آدرس ایمیل ما (درج شده در بخش تماس با ما) ارسال کنید تا بررسی کنیم.
نویسنده: علی
۱۶:۰۱ ۱۳۹۳/۰۲/۲۱
یه سوالم دارم آیا میشه چند تا فایل htaccess داشت؟؟؟؟؟؟؟؟؟؟؟؟
پاسخ: 
در حالت معمول، در یک دایرکتوری خیر، مگر اینکه تنظیماتی در سرور انجام شده باشد، اصولا چنین کاری توصیه نمی شود.
نکته: امکان استفاده از چند فایل htaccess در دایرکتوری های مختلف وجود دارد.
نویسنده: علی
۲۱:۴۶ ۱۳۹۳/۰۲/۲۱
سلام فایل فشرده ای به نام l1 ایمیل زدم.
ممنون میشم جواب بدین
پاسخ: 
سلام
یک دایرکتوری دیگر اضافه کرده اید، لذا در دستور htaccess باید آن را به صورت زیر تعریف کنید:
RewriteEngine on
RewriteRule ^file/([^/]+)(\.zip|\.pdf|\.jpg)$ /l1/limit-direct-access/file/download.php?file=$1$2 [NC,L]
همچنین headers_module و rewrite_module باید در قسمت تنظیمات Apache در Wampserver تیک خورده باشند (فعال باشند).
نکته: پاسخ به ایمیل شما ارسال شد.
نویسنده: علی
۲۰:۰۰ ۱۳۹۳/۰۲/۲۲
کمتر سایتی مثل وبگو دیدم
محشره
به چند ساعت نکشید که طی 2، 3 میل جوابمو گرفتم
خدا قوت
اگه بشه یه آموزش از htacces و htpassword بذارین خیلی خوب میشه 36
نویسنده: بهاره
۱۷:۲۲ ۱۳۹۳/۰۲/۲۴
خوب بود
نویسنده: ایوب
۱۸:۵۷ ۱۳۹۳/۰۳/۲۳
سلام
من از وردپرس استفاده میکنم و افزونه Easy Digital Downloads استفاده میکنم که بخوبی کار می کند
اما سرور دانلود من دایرکت ادمین هست و میخوام کاری کنم که فقط وب سایتم بتونه دانلود رو از سرور انجام بده و اگه کاربر لینک فایل رو در ادرس بار تایپ کنه نتونه دانلود کنه
ممنون میشم جواب بدین
پاسخ: 
سلام
این آموزش دقیقا در همین رابطه است! روش آسانی وجود ندارد!
نویسنده: نیما
۱۵:۴۷ ۱۳۹۳/۰۳/۳۱
سلام
htaccess سایت من کلا کار نمیکنه انگار اصلا تو صفحه نیست ، سرور لینوکسی هم استفاده میکنم ،
اگه میشه راهنمایی بکنین ممنون میشم
پاسخ: 
سلام
با پشتیبانی هاست خود موضوع را مطرح کنید.
نویسنده: Amir Moradifar
۱۸:۱۴ ۱۳۹۳/۰۴/۱۸
با سلام تشکر فراوان بابت زحمت بسیاری که کشیده اید
نویسنده: رضایی
۱۸:۳۳ ۱۳۹۳/۰۴/۲۶
با سلام . چگونه فایل pdf بطور مستقیم در مرورگر باز بشود بدون باز شدن پنجره دانلود. من فایل pdf گذاشتم وقتیکه کلیک می کنیم پنجره دانلود منجر باز می شود
سوال دوم دارم . عکس که ابتدا اضافه می کنیم نشان می دهد اما وقتیکه در قسمت ویرایش می خواهم ویرایش کنم دیگر نشان نمی دهد با تشکر
پاسخ: 
سلام
برای نمایش فایل به جای دانلود آن باید این سربرگ ها را هنگام دانلود فایل به مرورگر ارسال کنید:
Content-Type: application/pdf
Content-Disposition: inline; filename.pdf
البته در مورد دانلود منیجر ممکن است نیاز به تنظیم قسمت
Downloads - Options - File types
و حذف فرمت pdf باشد.
قسمت دوم سوال مبهم است! در کجا تصویر را اضافه یا قصد ویرایش آن را دارید؟! (حل مشکل نیاز به تست دارد).
نویسنده: somayeh
۱۸:۱۶ ۱۳۹۳/۰۴/۲۸
سلام برای عدم نمایش کامل فهرست در نوار آدرس یعنی به جای نمایش
http://localhost/nazerin1/index.php
فقط
http://localhost/nazerin1
در نوار آدرس نمایش داده بشه چطور میشه این کار رو انجام داد و فایل ها قابل دسترس و قابل نمایش در نوار آدرس نباشند. ممنون میشم اگه راهنمایی کنید
پاسخ: 
سلام
اگر در حد نمونه لینکی که قرار دادین باشد، با یک دستور دوباره نویسی ساده در htaccess ممکن است:
RewriteEngine on
RewriteRule ^nazerin1$ /nazerin1/index.php[NC,L]
اما اگر موارد دیگری را شامل شود، باید دقیق بررسی کرد، نمی توان بدون تست راه حلی ارائه کرد.
نویسنده: علی
۲۳:۰۱ ۱۳۹۳/۰۴/۳۰
بسیار ممنون!
خیلی زیبا بود !!
بسیار کاربری و مفیده !
شما همه آموزش هاتون به دردم میخوره !
خیلی ممنون
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





1 × 2
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form بنیامین
در:
درود. وقت بخیر. من یک سوالی از خدمتتون داشتم؟ من می خوام وقتی کاربر بنویسه بدون اینکه URL تغییر کنه. و اینکه چطوری بعد...
۱۳۹۹/۱۱/۰۷

form مهدی
در:
خیلی ممنون آموزش خیلی خوبی بود
۱۳۹۹/۱۱/۰۷

form علی
در:
سلام تشکر میکنم از شما و سایت فوق العاده عالی تون مشکلم حل شد تشکر میکنم موفق باشید
۱۳۹۹/۱۱/۰۵

form rofa
در:
سلام خسته نباشید خیلی ممنونم از مطالب خوبتون.. ببخشید علامتی که در سمت راست همین سایت هستش چجوری تغییر جهت میده با اسکرول کردن...
۱۳۹۹/۱۱/۰۵

form علی
در:
با سلام تشکر از سایت خوبتون و اموزشای خوبی که قرار میدین یک سوال داشتم من میخوام از یک فایل رشته ای همانند :...
۱۳۹۹/۱۱/۰۵

form علی
در:
با سلام سایت هایی من میخوام اطلاعاتی از سایتی بگیرم اما این سایت پس از چند ثانیه این اطلاعات رو به من نشون میده و...
۱۳۹۹/۱۱/۰۴

form شیدا
در:
سلام برای اینکه بتونم جدول ضرب 1 در 5 رو بنویسم چه کدهایی باید بنویسم؟
۱۳۹۹/۱۱/۰۳

form امیرحسین
در:
چرا استاد خیلی فرق داره الان کد زیر را شما در نظر بگیرید بین 0 تا 1 ثانیه طول میکشه اجرا شدنش خب شما...
۱۳۹۹/۱۱/۰۲

form امیرحسین
در:
سلام استاد حالتون چطوره، من یه سوال داشتم: تو پروژه های بزرگ که یک ارایه معمولا 20 عنصری یا نهایت 100 عنصری داشته باشیم...
۱۳۹۹/۱۱/۰۲

form کوثر رحیمی
در:
سلام ا ز راهنماییتون ممنونم من تازه وبلاگم رو درست کردم ۱۲ سالمه هر کاری می کنم فیلم در اون قرار نمیگیره همش این خطا...
۱۳۹۹/۱۰/۲۹

form متین
در:
سلام و خسته نباشید من بخوام داده ای که از قبل موجوده رو با متد پست به یک فایل ارسال کنم چجور میشه؟ یعنی...
۱۳۹۹/۱۰/۲۷

form روشنا
در:
سلام ما یه وبلاگ گروهی داریم مختص املاک فایل های جدید و حتی قالب جدید اصلا اعمال نمیشه . حتی راهنمایی که کرده...
۱۳۹۹/۱۰/۲۷

form علی
در:
من در یک سایت سازی سایت ساختم یه بخش داره به نام اسکریپت دلخواه می خوام یه اسکریپتی بذارم که مثلا یه موسیقی وقتی کاربر...
۱۳۹۹/۱۰/۲۷

form امیرحسین
در:
بله استاد خیلی ممنون، نمیدونستم خودش Optimize رو انجام میده در کل من بعد از ایندکس گذاری ها همیشه سعی کردم جوری که با...
۱۳۹۹/۱۰/۲۶

form امیرحسین
در:
ُسلام وقت بخیر این کووری هم چون اول قسمت WHERE انجام میشه بعد قسمت ON پس این کووری هم با حالت کووری قبلی برابره
۱۳۹۹/۱۰/۲۶
form امیرحسین
در:
سلام استاد وقت بخیر ممنون از پاسخ گویی های قبلی یه سوال دیگه داشتم: این هم هیچ مشکلی نداره و کار میکنه، ایا...
۱۳۹۹/۱۰/۲۵
form محمد بیدل بازه
در:
سلام خسته نباشید ببخشید من توی یک قسمت سایتم تصویری دارم و میخوام سمت راست اون تصویر متن بنویسم ولی نمیشه تا متن رو...
۱۳۹۹/۱۰/۲۵
form سلام
در:
و اینکه یه تگ خوب برای فونت معرفی کنید و یه تگ دیگه که متن رو (تیتر مطلب (تست)) در ادامش بنویسه نه اینکه...
۱۳۹۹/۱۰/۲۴
form سلام
در:
سلام وبسایتم را نگاه کنید از چه تگی استفاده کنم تا فاصله بین تیتر مطلب جدید را کاهش دهم؟ (از خطی به خط...
۱۳۹۹/۱۰/۲۴
form وطن
در:
سلام. خسته نباشید. خیلی گشتم درباره یک خطا یا ایراد فنی که چند روز هست در سایت نوشته شده با پی اچ پی (اسکریپت اولوشن)...
۱۳۹۹/۱۰/۲۴
form حورارمی
در:
سلام. من هنوز نمیدونم تو تنظیمات باید کجا رو بگردم تا قالب وبلاگم رو با عکس مورد علاقه ام تغییر بدم. یا نمیتونم...
۱۳۹۹/۱۰/۲۳
form راشد
در:
این روش خیلی طولانیه در فروشگاه من یک برنامه گرفتم که یه عکس توش اپلود کن بهت یک لینک میده در ظرف چند ثانیه و...
۱۳۹۹/۱۰/۲۱
form باسلام
در:
باسلام خدمت شما عزیز زحمت کش، من مطلب را تا آخر مطالعه کردم. من وبلاگم بازدیدای زیادی داره چون تمام مطالبش رو خودم مینویسم و...
۱۳۹۹/۱۰/۲۱
form محمود
در:
سلام و عرض ادب من در سایتم یک قسمت تب ایجاد کردم، متن ها را که در تب می نویسم پاراگراف بندی نمی شوند....
۱۳۹۹/۱۰/۲۱
form علی آقابیگی
در:
سلام خسته نباشید ببخشید من می خواستم کد جدید در وبلاگم بزارم بعد اشتباهی رفتم در قسمت ویرایش کدها و بعد بیشتر کدها را پاک...
۱۳۹۹/۱۰/۲۰
form محمد
در:
سلام. من میخوام با جاوا اسکریپت یک کدی بنویسم که وقتی کاربر روی یک دکمه ‏ای کلیک کرد، یک کد تصادفی برای شمارش ارسال...
۱۳۹۹/۱۰/۲۰
form پوریا
در:
سلام خسته نباشید، ممنونم بابت توضیحات خوبتون، یه مشکلی داشتم میخواستم ببینم امکانش هست راهنمایی کنید؟ فرض کنید یه اینطور متنی داریم: ...
۱۳۹۹/۱۰/۱۹
form seyedsobhanmansouri
در:
سلام خسته نباشید من سایتمو طراحی کردم اما به این مشکلات بر میخورم اول اینکه هدر سایتم نمایش داده نمیشه اصلا و بعد...
۱۳۹۹/۱۰/۱۹
form رضا
در:
سلام. ممنون بابت مطالب مفیدتون. این نوع جستجو به سئو سایت لطمه نمیزنه؟؟؟ چون در این مدل جستجو، مقدار impression میره بالا ولی...
۱۳۹۹/۱۰/۱۹
form mahdi
در:
سلام استاد عزیز ، پس بنظرتون بجای وقت گذاشتن برای یادگیری لاراول و وردپرس ، وقت بزارم که عمیق تر php و ساختار mvc...
۱۳۹۹/۱۰/۱۹
form علی
در:
سلام و ممنون بابت وبسایت عالیتون داخل بعضی سایت ها دیدید مثلا یه متنی شروع به تایپ شدن می کنه و وقتی کامل شد...
۱۳۹۹/۱۰/۱۸
form محمد
در:
سلام خدمت شما دوست عزیز سوالم این بود میخاستم چندتا مثال از این تابع و چند تابع دیگه از خودتون رو برام مثال بزنید...
۱۳۹۹/۱۰/۱۸
form محمود رنجبر
در:
سلام برادر مشکل من تو همین سایتی هست که فرستادم وقتی گزینه خانه رو کلیک میکنم و بعد دکمه بک گوشی رو میزنم بالای صفحه...
۱۳۹۹/۱۰/۱۷
form mahdi
در:
سلام استاد عزیز ، بعد از آموزس php با لاراول کار کنیم بهتره ؟
۱۳۹۹/۱۰/۱۶
form رضا
در:
آدرس رو براتون گذاشتم دامنه قبلا روی یه وبلاگ میهن بلاگ بود چند ماه میشه که از میهن بلاگ خداحافظی کردم ولی هنوز که هنوزه...
۱۳۹۹/۱۰/۱۴
form نیلو
در:
سلام... ببخشید بعد طراحی قالب قالب شیشه ایم هست یا نه؟؟؟
۱۳۹۹/۱۰/۱۳
form مجتهدزاده
در:
سلام من یه فرمی طراحی کردم که توش قراره تعداد زیاد (حدود 10 الی 50) فیلد رو تو دیتابیس اینسرت کنم. آیا باید...
۱۳۹۹/۱۰/۰۸
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.