i
در حال برنامه نویسی و آماده سازی نسخه جدید «وبگو» هستیم، در این نسخه قابلیت ها و ظاهر سایت به کلی متفاوت و کاملتر خواهد بود، این فرآیند زمانبر و از مدتی پیش شروع شده و همچنان ادامه دارد، روند پیشرفت پروژه در این قسمت به صورت درصدی مشخص است و به تناوب به روزرسانی می شود.
parsgreen.com
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>
<!-- http://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 مطالب بیشتر:
» نحوه نمایش متن و تصاویر اتفاقی در php و mysql
» ساخت منوی هوشمند با php و css!
» آموزش ساخت نقشه سایت (Sitemap) با php و xml
» نمایش قسمتی از متن و پاراگراف با php
» ساخت فید خوان آر اس اس (RSS Feed Reader) با php
commentنظرات (۸۸ یادداشت برای این مطلب ارسال شده است)
نویسنده: tohidhabiby
زمان: ۱۳:۱۱:۵۶ - تاریخ: ۱۳۹۴/۰۵/۱۷
با سلام و عرض خسته نباشید از شما که سایت به این خوبی دارید یه انتقاد دارم اونم اینه که کاش تمام آموزش هایی که از php یا هر زبانی میذارید به صورت شی گرایی باشه من اول به صورت عادی یاد گرفتم و حالا که وارد بازار کار شدم خیلی در این زمینه مشکل دارم و منبع خوبی هم که به زبان فارسی باشه سراغ ندارم اگر از ابتدا php رو شی گرایی یاد گرفته بودم امروز کمتر مشکل داشتم ممنون
پاسخ: 
سلام
هرچند در آینده در این خصوص مجموعه آموزش هایی مطرح خواهیم کرد، اما در حال حاضر به چند دلیل این کار انجام نشده:
- درک این شیوه برای افراد تازه کار و آنهایی که هیچ آشنایی با مفاهیم ندارند کمی پیچیده است و اغلب باعث سردرگمی، نا امید شدن و در نهایت انصراف آنها از ادامه یادگیری می شود.
- شی گرائی یک شیوه فراگیر است و محدود به PHP نیست، یعنی در خیلی از زبان های دیگر نیز کاربرد دارد و از اصول مشترکی پیروی می کند.
- کدها و برنامه هایی که به شیوه معمولی نوشته می شوند، به راحتی قابل تبدیل به شیوه شی گرا هستند!
- شی گرائی معمولا برای پروژه های بزرگ به کار می رود و برنامه های یک صفحه ای و محدود، عمدتا نیازی به این شیوه ندارند.
نویسنده: امین
زمان: ۱۹:۲۰:۴۷ - تاریخ: ۱۳۹۴/۰۵/۲۶
سلام استاد اگر میشه در مورد مساله زیر راهنمایی بفرمایید.
ببینید فرض کنید من یک سایت با آدرس زیر دارم
www.mysite.com
بعد هر کسی که ثبت نام کرد میخوام یک زیر دایرکتوری به ازاش ایجاد بشه
مثلا وقتی amin ثبت نام کرد آدرسش بشه :
www.mysite.com/amin
میشه بفرمایید چکار کنم؟
پاسخ: 
سلام
اگر دایرکتوری مورد نظر واقعا باید در سرور ایجاد شود، باید از توابع مروبط به فایل و فولدر در PHP استفاده کنید، مثال:
<?php
$dir = $_POST['user_name'];
if(!file_exists('path/to/'.$dir)) {
mkdir('path/to/'.$dir, 0777, true);
}
else{
echo 'Error! File Or Folder Exists!';
}
?>
در غیر اینصورت اگر دایرکتوری مجازی است، می توانید با ذخیره اطلاعات در دیتابیس و دستورات htaccess آن را مدیریت کنید که در این زمینه لطفا به مباحث URL Rewrite مراجعه نمائید!
نویسنده: امین
زمان: ۱۱:۴۶:۴۶ - تاریخ: ۱۳۹۴/۰۶/۱۱
سلام خداقوت
مفید بود
فقط یه مشکل هنگام استفاده داشتم اونم سرعت دانلود به شدت کم میشه یعنی اگه در حالت عادی با سرعت 60KB/s دانلود میکنه فایل رو (همون فایل رو که خودم روی سرور جهت تست قرار میدم)
با استفاده از این متد برای دانلودش سرعتش میرسه به 7KB/s اونم به سختی دانلود میکنه یعنی یه فایل 1 مگابایت رو 15 دقیقه طول میکشه تا دانلود کنه
لطفا یه راه حل واسه این مشکل ارائه بفرمایید
باتشکر
پاسخ: 
سلام
کدها مجددا تست شدند، این مشکل دیده نشد! دستور خاصی در کدها وجود ندارد که باعث کندی سرعت شود، تنها مشکل ادامه دانلود وجود دارد که آن هم نیاز به کدنویسی اضافه و آموزشی جداگانه است، اگر یک لینک درج کنید، شاید به درک مشکل کمک کند!
نویسنده: امین
زمان: ۲۲:۲۴:۵۱ - تاریخ: ۱۳۹۴/۰۶/۱۱
سلام
خدمت شما
لینک اول توسط php دانلود میشه (توسط فایل راهنمایی که لطف کردید و تهیه کرده اید)
http://goo.gl/5Wc2B4
لینک زیر همان فایل در همان سرور است اما کاملا مستقیم دانلود میشه بدون هیچ دوباره نویسی
http://goo.gl/TDAa2n
باتشکر بابت پاسختون
پاسخ: 
سلام
هر دو لینک تست شد، جزء بحث ادامه دانلود و دانلود موازی (که در برنامه هایی مانند IDM وجود دارد)، از نظر سرعت تفاوت خاصی دیده نشد، هر دو لینک از حداکثر سرعت اتصال استفاده می کنند، البته روشن است که لینک دوم به دلیل قابلیت دانلود موازی در زمان کمتری دریافت خواهد شد که این با بحث حجم در ثانیه برای یک اتصال فرق می کند! در فروم ها و سایت های مختلف کمتر مشکلی در رابطه با سرعت دانلود فایل با کدهای PHP مطرح شده و این احتمال اینکه مشکل از مورد دیگری در سیستمتان باشد را تقویت می کند!
نویسنده: امین
زمان: ۲۲:۲۶:۵۲ - تاریخ: ۱۳۹۴/۰۶/۱۱
لطفا یه راهنمایی هم بفرمایید که مشکل ادامه دانلود هم برطرف شود
پاسخ: 
ایجاد این قابلیت نیاز به کدنویسی و گسترش کدهای فعلی دارد، چند لینک مفید در این زمینه:
http://stackoverflow.com/questions/157318/resumable-downloads-when-using-php-to-send-the-file

http://www.phpclasses.org/package/2221-PHP-Server-files-for-downloading-with-resume-support.html
نویسنده: امین
زمان: ۱۲:۴۳:۳۰ - تاریخ: ۱۳۹۴/۰۶/۱۴
بسیار ممنون از پاسختون
نویسنده: هادی
زمان: ۲۳:۱۰:۲۱ - تاریخ: ۱۳۹۴/۰۹/۱۹
با سلام و خسته نباشید
نمی دونم طرح سوالم ایجا کار درستی هست یا نه اما جای دیگه ای تو سایتتون پیدا نکردم که به سوالم مربوط باشه.
1- من یه سایت طراحی و آپلود کردم روی هاست و امنیت نسبی ای داره ولی یه مشکل هست که اگه کاربر به جای
site.com/manager/default.php
فقط
site.com/manager
بزنه کل فایل های داخل این پوشه براش لیست میشه. راه حل این مشکل چیه؟
2- چیکار کنم که اگه کاربر به نام صفحه ای رو به عمد یا سهو اشتباه تایپ کرد به صفحه index.php منتقل بشه؟
ممنون از شما
پاسخ: 
سلام
1- برای حل این مشکل می توانید در سربرگ Advanced در cPanel (اگر از cPanel استفاده نمی کنید، روش دوم را استفاده کنید) گزینه Indexes را انتخاب و از لیست موجود، بر روی Up One Level کلیک کنید، سپس فولدر www یا public_html را انتخاب و از گزینه های موجود No Indexing را تیک زده و تنظیمات را ذخیره کنید!
2- روش دیگر این است که با استفاده از فایل htaccess. دستور زیر را اضافه کنید:
Options -Indexes
- برای انتقال به صفحه اصلی در صورت ورود آدرس اشتباه، می توانید از طریق دستورات htaccess. زیر، صفحه پیش فرض خطاهای سرور را با صفحات خود جایگزین کنید (در صفحه خود می توانید از تگ refresh و... استفاده کنید):
ErrorDocument 404 /notfound.html
به طور مثال با دستور بالا، هر زمان خطای 404 رخ دهد، به جای صفحه پیش فرض، صفحه notfound.html از ریشه سایت نمایش داده می شود.
نویسنده: سعید
زمان: ۰۳:۲۳:۴۳ - تاریخ: ۱۳۹۴/۱۰/۰۴
سلام
چطوری می تونم از این روش برای فایل های ogg (صوتی) استفاده کنم؟ برای پخش آنلاین با پلیر html5 لازم دارم.
تشکر
پاسخ: 
سلام
اگر منظورتان غیر مستقیم شدن لینک فایل ها و در عین حال پخش آنلاین آنها است، متاسفانه به سادگی و با اکتفا به این آموزش شدنی نیست! در واقع هیچ روش صد در صدی که بتواند جلوی دانلود فایل صوتی در اینچنین مواردی را بگیرد وجود ندارد!
نویسنده: hadi
زمان: ۱۴:۴۲:۱۰ - تاریخ: ۱۳۹۴/۱۰/۰۷
ممنون عالی بود
نویسنده: تکراری
زمان: ۲۰:۴۰:۰۱ - تاریخ: ۱۳۹۴/۱۰/۲۳
سلام خسته نباشید
ببخشید این سوالو فکر کنم یکبار پرسیده بودم ولی پیداش نمیکنم
این امکان وجود داره که بجای دانلود فایل های pdf فقط امکان پرینت گرفتن وجود داشته باشه واسه بازدید کننده ؟ یعنی همونطور که با php فایل رو برای دانلود برای بازدید کننده ارسال میکنیم فقط برای پرینت گرفتن ارسال بشه ؟
باتشکر
پاسخ: 
سلام
تا آنجا که اطلاع داریم چنین کاری شدنی نیست! برای پرینت فایل باید ابتدا به نحوی محتوا را در اختیار کاربر قرار دهیم (معمولا به شکل نمایش در مرورگر) که به همین دلیل نمی توان مانع بارگذاری فایل در سیستم کاربر شد!
نویسنده: تکراری
زمان: ۲۳:۲۱:۳۴ - تاریخ: ۱۳۹۴/۱۰/۲۳
اوکی خیلی ممنون بابت راهنماییتون
نویسنده: asghar
زمان: ۱۲:۳۳:۰۶ - تاریخ: ۱۳۹۴/۱۰/۲۶
با سلام
اقا یه سایتی اومده لینک آدرس دامنه ما را بر روی ادرس دامنه خودش ریدایرکت کرده. برای اینکه کسی نتونه سایت و لینک های سایت ما را در سایت خودش ریدایرکت و لود کند چیکار باید کرد؟ (در htaccess چه کدی باید نوشت؟) که از ریدایرکت کردن جلوگیری کند؟
پاسخ: 
سلام
سوالتان دقیق نیست! در واقع امکان ریدایرکت سایت شما روی دامنه دیگر عملا ممکن نیست جزء اینکه سایت شما هک یا DNS های آن تغییر داده شوند! البته به نظر مشکل شما مربوط به بحث نمایش سایت در فریم است که برای حل آن می توانید این کد را در صفحه درج کنید:
<script type="text/javascript">
if(top.location.href != self.location.href){
top.location.href = self.location.href;
}
</script>
همچنین می توانید در کنار کد بالا، دستورات htaccess زیر را داشته باشید:
Header set X-Frame-Options DENY
Header always append X-Frame-Options SAMEORIGIN
نویسنده: محمدرضا
زمان: ۱۳:۲۵:۳۹ - تاریخ: ۱۳۹۴/۱۰/۲۹
با سلام و ممنون به خاطر مطلب آموزنده شما.
من برای دانلود غیرمستقیم کاربران سایتم اول میام و با کوکی بررسی میکنم که کاربر لاگین کرده یا نه. بعد در صورت لاگین و وجود اعتبار برای کاربر میام و از دستور زیر
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;
فایل رو به مرورگر میفرستم که کاربر دانلود کنه. همچنین دسترسی مستقیم به فایل رو از طریق اچ تی اکسس در فلودر مربوط به فایل ها بستم.
دو تا سوال خدمت شما داشتم:
1- آیا احتمال دور زدن کدها هست که کاربر ادرس واقعی فایل رو به دست بیاره و اونو دانلود کنه؟ حالا با هر نرم افزار یا کدی؟
2- کاربرا با هر مرورگری می تونن بعد از لاگین فایل دانلود کنن اما با مرورگر پیش فرض گوشی های اندروید نه (مرورگر کروم رو نمی گم مرورگری که اسم خاصی نداره!)
حتی بخش لاگین هم غیر فعال کردم گفتم شاید کوکی مشکل داره اما همین طوری هم که بدون اعتبارسنجی فایل در اختیار کاربر قرار میگیره، باز هم فایل دانلود نمیشه. مشکل چیه؟ آیا کدها چیزی کم دارن؟
پاسخ: 
سلام
- در مورد بخش اول سوال، در صورتی که با وارد کردن آدرس مستقیم فایل در مرورگر، نمی توانید به آن دسترسی پیدا کنید، دیگران نیز (با هر روشی) نمی توانند به فایل دسترسی داشته باشند!
- این مشکل احتمالا به استاندارد یا به روز نبودن مرورگر مربوط است، پارامتر زیر را نیز به کدها اضافه کنید (در ابتدا):
header ("200 HTTP/1.0 OK");
همچنین پارامتر زیر را حذف و امتحان کنید:
header('Content-Transfer-Encoding: binary');
اگر مسئله رفع نشد، این سه پارامتر را به ابتدای سایر پارامترها منتقل کنید:
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
نویسنده: محمدرضا
زمان: ۲۲:۴۱:۴۰ - تاریخ: ۱۳۹۴/۱۰/۲۹
ممنون از پاسختون.
اما هر چی تلاش می کنم نمیشه.
تمام کدهایی که گفتین انجام دادم بازم نشد.
حتی کدهای
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
هم اضافه کردم اما دوباره کار نمی کنه.
مشکل کجاست؟ من با اندروید 4.4 چک می کنم و مشکل داره. راهی برای حل این مشکل نیست؟
پاسخ: 
این مشکل به مرورگر مورد نظر ارتباط دارد و یک مسئله فراگیر نیست، چرا که دستورات HTTP یک استاندارد فراگیر هستند و قاعدتا در مرورگرهای استاندارد عمل خواهند کرد! مرورگر مد نظر شما باید اسمی داشته باشد، نام این مرورگر را از قسمت اطلاعات برنامه پیدا و عنوان کنید، شاید باگ یا راه حل خاصی وجود داشته باشید!
نویسنده: محمدرضا
زمان: ۰۹:۳۴:۱۱ - تاریخ: ۱۳۹۴/۱۱/۰۱
ممنونم از اطلاعاتی که بهم دادین.
paged صفحه 4 از 6




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

8 × 9
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...
پرشین آی تی
Persianit.net

آموزش و دانلود پروژه های برنامه نویسی سی شارپ (#C)