سیستم عامل اندروید بر پایه سیستم عامل لینوکس طرح ریزی شده است و ماشینی مجازی در این سیستم عامل تحت عنوان Dalvik تعبیه شده است که برای دستگاه های موبایل بهینه سازی شده است. به طور خلاصه می توان گفت که این ماشین مجازی دارای وظایف متعددی از جمله مدیریت حافظه، سهولت در استفاده از Sandbox در تولید اپلیکیشن، فشرده سازی بیشتر اپلیکیشن و سازگاری با CPU های مختلف در انواع مختلف دستگاه ها بدون نیاز به بازنویسی اپلیکیشن برای هر CPU خاص می باشد(در آموزش سوم با مفهوم Sandbox بیشتر آشنا خواهیم شد).
برای جستجو در اینترنت، سیستم عامل اندروید از موتور جستجوی Open Source یی تحت عنوان WebKit استفاده می کند. به منظور پردازش عکس های دو بعدی و سه بعدی، سیستم عامل اندروید از OpenGL ES استفاده می کند و برای ذخیره سازی اطلاعات از SQLite استفاده می کند.
همانطور که در آموزش اول اشاره شده، زبان برنامه نویسی اصلی سیستم عامل اندروید جاوا است. در واقع پس تکمیل یک اپلیکیشن اندروید، این اپلیکیشن در قالب یک فایل با پسوند apk که مخفف Android Package است Compile می شود که این فایل را می توان در بازارهای مختلفی همچون Google Play و غیره در اختیار علاقمندان قرار داد تا بتوانند با نصب آن از اپلیکیشن ها استفاده نمایند.
به طور خلاصه یک اپلیکیشن اندروید از Component های مختلفی که در ادامه این آموزش به چهار مورد از اصلی ترین ها اشاره می شود، یک فایل Manifest و Resource های متفاوتی تشکیل می شود. در ادامه هر یک از این اجزا را مورد بررسی قرار خواهیم داد.
برای ساخت یک اپلیکیشن اندروید چهار Component اصلی وجود دارد که عبارتند از: Activity و Service و Content Provider و Broadcast Receiver.
در صورتیکه بخواهیم معنای یک Activity را در سیستم عامل اندروید به خوبی متوجه شویم، می توان آن را به منزله یک صفحه از اپلیکیشن تصور کرد. برای روشن شدن این مسئله مثالی ذکر می کنیم. فرض کنیم که یک اپلیکیشن را اجرا می کنیم. این اپلیکیشن پس از اجرا وارد صفحه اصلی برنامه می شود. این صفحه اصلی یک Activity است. حال می بینیم که چندین دکمه در این صفحه اصلی برای رفتن به بخش های مختلف برنامه تعبیه شده به طور مثال یک دکمه جهت صفحه راهنما، یک دکمه جهت ارتباط با طراح اپلیکیشن، یک دکمه جهت وارد شدن به موتور جستجو در اینترنت و غیره. زمانیکه ما پس از زدن دکمه راهنما وارد صفحه راهنما می شویم در واقع وارد یک Activity دیگر شده ایم. اکنون این Activity جدید Activity قبلی که مربوط به صفحه اصلی برنامه بود را پس زده و جای آن را می گیرد. در این حین اگر دکمه Back تلفن همراه خود را فشار دهیم، Activity قبلی مجدد بالا آمده و Activity مربوط به صفحه راهنما را پس می زند.
اکنون ببینیم که یک Activity را به چه نحوی می توان ساخت. در حقیقت دو راه برای ساخت Activity ها در سیستم عامل اندروید وجود دارد: راه اول که به صورت دینامیک و پویا است با استفاده از برنامه نویسی جاوا می باشد و راه دوم با استفاده از XML است. روشی که در این سری از آموزش ها بیشتر مورد استفاده قرار خواهد گرفت، طراحی Activity ها با استفاده از XML است چرا که نه تنها این کار آسان تر است بلکه با پیروی از چنین رویکردی می توان کد های مربوط به GUI یا محیط گرافیکی را از کد های مربوط به نحوه عملکرد عناصر داخل این محیط گرافیکی که در زبان جاوا نوشته می شوند را از یکدیگر مجزا ساخت و این در حالی است که با اتخاذ چنین رویکردی Debug کردن اپلیکیشن ما هم به مراتب آسان تر خواهد شد.
دومین Component که از میان دیگر Component های از اهمیت بسزایی برخوردار است Service است. در حقیقت در پروسه طراحی اپلیکیشن اندروید Service به اجرای عملیاتی اطلاق می شود که خارج از دید کاربر رخ می دهند که ممکن است این دسته از عملیات خواه برای مدت زمان کوتاهی صورت پذیرند و خواه برای مدت زمان طولانی تری اجرا گردند. نکته ای که در مورد Service ها جالب است این است که این دسته از Component ها دارای هیچ گونه GUI یی نمی باشند و در Background برنامه اجرا می شوند. برای روشن شدن مطلب مثالی ذکر می کنیم. فرض کنیم که در حین اس ام اس دادن به یکی از دوستان خود تمایل داریم تا به آهنگ مورد علاقه مان نیز گوش فرا دهیم. در حقیقت زمانیکه موسیقی در حال پخش شدن است و ما اقدام به اس ام اس دادن می کنیم ما هیچ اثری به جزء صدای آهنگ نخواهیم دید و این همان خاصیت Service ها است که گفته می شود در پس زمینه اپلیکیشن یا Background اتفاق می افتند.
نکته دیگری که در مورد Service ها می بایست مد نظر قرار دهیم این است که Service ها مجزا از Activity هایی که آن ها را اجرا می کنند می توانند به کار خود ادامه دهند. فرض کنیم که یک Activity داریم که دارای یک دکمه Play است. با زدن این دکمه پخش موسیقی آغاز خواهد شد و این در حالی است که اگر این Activity را ببندیم و یا یک Activity دیگر جای این Activity را بگیرد، Service یی که وظیفه داشت پخش موسیقی را اجرا کند می تواند به کار خود ادامه دهد.
جایگاه سوم در میان Component ها را Content Provider ها به خود اختصاص داده اند. وظیفه ای که بر عهده این گروه از Component ها گذاشته شده است، ذخیره سازی اطلاعات و قرار دادن اطلاعات ذخیره شده در اختیار دیگر اپلیکیشن ها می باشد. به طور خلاصه تنها راه به اشتراک گذاری داده ها میان اپلیکیشن های مختلف به کارگیری Content Provider ها می باشد. چنانچه ما داده هایی داشته باشیم و بخواهیم این داده ها را در دسترس دیگر بخش های اپلیکیشن خود قرار دهیم، به سادگی می توانیم یک Content Provider ایجاد کرده و مابین بخش هایی که می خواهند از آن استفاده کنند ارتباطی برقرار سازیم. تعدادی از این Content Provider ها از پیش در سیستم عامل اندروید تعبیه شده اند که از آن جمله می توان به Contact و Media اشاره کرد. به طور مثال اگر بخواهیم در اپلیکیشنی به لیست شماره های تلفن همراه خود دسترسی پیدا کنیم، صرفاً نیاز است تا ارتباطی مابین اپلیکیشن خود و Content Provider مرتبط با Contact سیستم عامل اندروید برقرار سازیم.
آخرین Component تحت عنوان Broadcast Receiver این وظیفه را دارا است تا به هشدارهایی که در سطح کل سیستم بوجود می آیند پاسخ دهد. همانند Service ها Broadcast Receiver ها نیز دارای هیچ گونه GUI یی نمی باشند(عبارت GUI مخفف واژگان Graphical User Interface به معنی رابط گرافیکی کاربر می باشد). برای روشن شدن وظیفه Broadcast Receiver ها به مثالی اکتفا می کنیم. فرض کنیم می خواهیم برنامه ای بنویسیم که زمانیکه انرژی باطری تلفن همراه ما به 30 درصد رسید به ما هشدار دهد. این هشداری که به محض رسیدن انرژی تلفن همراه به 30 درصد روی صفحه تلفن مشاهده می شود یک نوع Broadcast Receiver می باشد.
پس از آشنایی با چهار Component اصلی سیستم عامل اندروید، اکنون به بررسی یکی از مهم ترین فایل ها در ساخت یک اپلیکیشن اندرویدی که همان فایلManifest است می پردازیم. هر اپلیکیشن و یا بازی اندرویدی می بایست دارای فایلی تحت عنوان AndroidManifest.xml در دایرکتوری اصلی خود که همان Root Directory است باشد(به حروف کوچک و بزرگ در نام این فایل توجه کنید). کاری که این فایل انجام می دهد این است که اطلاعاتی کلی پیرامون اپلیکیشن یا بازی طراحی شده به سیستم اندروید می دهد. به عبارت دیگر، این فایل Component هایی را که ما در برنامه خود مورد استفاده قرار داده ایم را به سیستم عامل اندروید معرفی می کند. از سوی دیگر این فایل Permission ها یا مجوزهایی که کاربر برای نصب برنامه می بایست صادر کند را نیز در بر می گیرد. فرض کنیم که برنامه ای طراحی کرده ایم که نیاز به دسترسی به اینترنت دارد. حال اگر کسی بخواهد این برنامه طراحی شده توسط ما را مورد استفاده قرار دهد، در حین نصب اجازه دسترسی به اینترنت از آن کاربر توسط اپلیکیشن گرفته خواهد شد.
ادامه مطـــلب در منبع...با سلام خدمت کاربرن عزیز گروه کامپیوتر دانشگاه آزاد
با توجه به سوالات متداول از همکارانمان برای توضیح کد های Vpi و Vci بر آن شدیم در یک پست به این سوال کاربران عزیز پاسخ دهیم با ما همراه باشید. . .
VCI و VPI دو مقدار مهم در تنظیمات مودم هستند که مشخص کننده مسیر و کانال انتقال دادهها به ISP است که برای هر ISP داخلی، متفاوت از دیگری است. این دو مقدار در حالت انتقال ATM استفاده میشوند.
Vpi مخفف : Virtual Path Identifier - مشخص کننده مسیر مجازی
Vci مخفف :Virtual Channel Identifier -مشخص کننده کانال مجازی
یکی از مهمترین تنظیماتی که برای اتصال به اینترنت در مودم (Modem) خود باید آن را انجام دهید، تنظیمات مربوط به دو مقدار VCI و VPI است. این مقادیر توسط ISP مشخص میشوند و نشان دهنده کانال انتقال داده اند.
توجه: VPI مشخص کننده شماره مسیر VP و VCI مشخص کننده شماره مسیر VC است. بنابراین برای درک بهتر، ابتدا کانال VC و مسیر VP را شرح میدهیم و در بخش دوم به مشخص کننده آنها (یعنی VCI و VPI) که در تنظیمات مودم استفاده میشوند، خواهیم پرداخت.
VP مخفف عبارت "Virtual Path" به معنای "مسیر مجازی" است. در تکنولوژی انتقال داده ATM (یک حالت انتقال داده - در بخشهای بعدی توضیح داده خواهد شد)، مسیر اصلی و فیزیکی انتقال دادهها به چندین بخش مجزا تقسیم میشود. چون این تقسیم بندی واقعاً به صورت فیزیکی نیست و در لایههای بالاتر استفاده میشود، به آن "مسیر مجازی" گفته میشود. این تقسیم بندی مسیر، برای جلوگیری از تداخل دادههای رد و بدل شده در یک شبکه یا اینترنت است.
برای درک بهتر این تقیسم بندی، ارتباط بین دو شهر را فرض کنید که با چندین بزرگ راه (همه شرایط آنها شامل طول، پهنا و ... به جز نامشان را یکی در نظر بگیرید) به هم وصل شده باشد و در انتهای هر یک از این بزرگ راهها (مسیر مجازی) یک نفر ایستاده باشد. درصورتی که فرد Y (پاکت داده) بخواهد از مبداء به مقصد برود، میتواند از همه این مسیرها راهش را بپیماید. درست است که فرد به مقصد رسیده اما درصورتی که بخواهد نفر X (مسیر دادهها به ISP مشخص) را که در انتهای یکی از این مسیرها ایستاده را ببیند، باید درست از همان مسیر حرکتش را انجام دهد که از قبل تعیین شده است (توسط ISP).
خود مسیر مجازی (VP) نیز به چندین کانال تقسیم میشود که به آن VC میگویند. VC مخفف عبارت "Virtual Channel" به معنای "کانال مجازی" است. کانالهای مجازی موجود در یک مسیر مجازی، مقصد نهایی را مشخص میکنند. با استفاده از مسیر مجازی و کانال مجازی، پاکتهای داده دقیقاً به جایی خواهد رسید که انتظار داشتیم. به همین دلیل، ISPها معمولاً دارای VC یا VP جداگانه از یکدیگر هستند مگر آن که همه آنها از یک نقطه مشترک (مثلاً مرکز اصلی مخابرات) دادههای خود را رد و بدل کنند چون در غیر این صورت، دادهها ممکن است به اشتباه ارسال شده و به مقصد برسند.
برای درک بهتر VC، همان مثال قبلی را فرض کنید با این تفاوت که در بزرگ را (VP) توسط خطوطی به چندین لاین (VC) تقسیم شده است. حال فرض کنید در یک مسیر مشخص، در انتهای هر باند، یک نفر (مقصد اصلی دادهها به یک ISP مشخص) ایستاده باشد. با این شرط که نتوانیم باندمان را در طول مسیر عوض کنیم، باید درست از همان مسیری حرکتمان را شروع کنیم که از قبل مشخص شده باشد (توسط ISP) تا به فرد مورد نظر برسیم.
شرکتهای ارائه دهنده خدمات اینترنتی (ISP) در ایران، VCI و VPI های زیر را برای دسترسی تعریف کرده اند.
توجه کنید که این لیست از وبسایت Hadiran.ir برداشته شده و ممکن است دارای اشکالاتی باشد. درصورت مشاهده هر گونه اشکال در این لیست، لطفاً از طریق قسمت تماس با ما یا بخش نظرات این مطلب اقدام کنید. همچنین میتوانید شماره VPI و VCI را از ISP خود پرسیده و همراه با نام ISP و استان خود، آن را در بخش نظرات ارسال کنید.
نام شرکت ISP |
مقدار VPI |
مقدار VCI |
استان (ها) |
| مخابرات | ۰ | ۳۵ | در اکثر شهرها |
| آسیاتک | ۰ | ۳۵ | |
| پارس آنلاین | ۰ | ۳۵ | تهران |
| شاتل | ۰ | ۳۵ | |
| صبانت | ۰ | ۳۵ | |
| های وب | ۰ | ۳۵ | |
| پارس آنلاین | ۰ | ۵۹ | در اکثر شهرها |
| مخابرات | ۰ | ۳۳ | آذربایجان شرقی |
| همارا سیستم | ۰ | ۳۳ | آذربایجان شرقی |
| عصر تله کام | ۸ | ۳۵ | |
| پیشگامان | ۸ | ۸۱ |
با سلام خدمت کاربران عزیز گروه کامپیوتر دانشگاه آزاد:
امروز با آموزش و دانلود برنامه AFWall در خدمت شما هستیم تا شما را با این برنامه اندرویدی و امکاناتش آشنا کنیم :
تا حالا با مشکل داده اینترنتی مواجه شدین زمانایی که خواستیم حجم بسته ای که از اپراتور ها گرفتین زیاد از دست ندین این برنامه برای اینکه هر برنامه ای که شما خواستین و اجازه شو دادین فقط از حجم شما برای اتصال به اینترنت استفاده کنه .
بسته های اینترنتی فیمت های خوبی دارن اما همونجور که آندروید کلا سیستم عامل خود سریع هست و هزار تا نرم افزار پس زمینه باز نگه میداره توی مصرف اینترنت هم همینطوریه . یهو میبینی یه چیزی بدون این که اطلاع بده داره آپدیت میشه و پول شما رو هدر میده. راه حل این مشکل استفاده از فایروال آندروید هستش که البته از اسمش نترسید . منظور نرم افزاریه که اجازه ی مصرف دیتا یا اینترنت رو برای برنامه های مختلف مشخص میکنه … یعنی میشه کاری کرد که شما یه بسته ۲۰۰ مگی رو فقط و فقط به وایبر اختصاص بدی و راحت یک ماه تمام از بسته خودت استفاده کنی
روش کار بصورت زیر هست :
برنامه نیازمند روت هستش . بعد از باز کردن برنامه و دادن دسترسی روت با همچین شکلی رو به رو میشید که یه لیستی از هر چی رو گوشی نصبه بهتون نشون میده .. جلوی آیکون هر نرم افزار سه نوع تیک وجود داره . نوع اول که روش نوشته LAN رو کاری نداریم . نوع دوم مربوط به اینترنت WIFI هستش و نوع سوم هم مربوط به اینترنت سیم کارت ..
خب همونجوری که تو تصویر بالا مشاهده میکنین من برای اینترنت WIFI تیک تمام برنامه ها رو روشن کردم که شما هم باید اینکارو کنین تا وقتی به اینترنت ADSL وصلین عملکرد گوشی دچار اشکال نشه و استفاده عادی بشه ازش کرد … دقت کنین وقتی این فایروال رو فعال کنین اینترنت WIFI رو هم تحت تاثیر میذاره پس حواستون باشه حتما این تیک رو بزنید …
اما توی قسمت اینترنت موبایل فقطو فقط برنامه هایی که نیاز دارین رو تیک بزنید . هر نرم افزاری تیک بخوره یعنی اجازه استفاده از اینترنت رو داره … برای مثال من فقط نرم افزار های ارتباطیمو اجازه دادم که از اینترنت استفاده کنن .. دو تا مرورگر هم برای مواقع ضروری گذاشتم باشه که اگه یه وقت لازمم شد نیاز نباشه بیام داخل برنامه و تنظیمات دوباره انجام بدم … شما بسته به نیاز خودتون هر نرم افزاری که میخواین رو تیک بزنید (اگه از اینترنت همراه واقعا در حد اینترنت همراه استفاده میکنین یعنی فقط واسه وقتی که خونه نیستین و بیرونن و اونم فقط برای اینکه در دسترس باشین نه اینکه سایت گردی و .. کنین پس فقط تیک همین نرم افزارهای ارتباطی رو روشن بذارین اینجوری راحت با ۲۰۰ مگ یه ماه رو جواب میده البته به ظرطی که کلیپ و .. نفرستید توی وایبر و امثال وایبر )
اما کار تموم نشده هنوز مرحله اصلی مونده !! شما بعد اینکه تیک برنامه های مورد نظرتون رو زدین نیاز به دو کار دیگه دارین . قدم اول ذخیره کردن تغییراتیه که در تیک ها دادین و قدم دوم روشن کردن فایروال
به عکس زیر نگاه کنین
بعد از زدن تیک ها روی منو یا همون سه نقطه کلیک کنید و بعد از دیدن این منو اول SAVE و بعد ENABLE رو بزنید .. تمام :)
حالا برای مثال وقتی به اینترنت سیم کارت وصلین نرم افزار بازار ( که تیک نخورده) رو باز کنید میبینید که ارور میده . اما وایبر رو باز کنین راحت پی ام میره . با این روش مصرف دیتا فقط و فقط به نرم افزارهای مورد نظرتون محدود میشه . عالیه نه ؟ :)
با نظراتتون منه نویسنده و گروه رو حمایت کنین مرسی
دانلود اخرین ورژن اندرویدی آ اف وال
حجم: 3.59 مگابایت
Android به زبان ساده سیستم عاملی است برای دستگاه های موبایل و گوشی های هوشمند که توسط بیش از 30 کمپانی معروف پشتیبانی می شود. آندروید اوپن سورس است و توسعه دهندگان می توانند با استفاده از Android SDK برنامه های مختلفی برای این سیستم عامل بنویسند. در واقع آندروید بستری را فراهم می کند تا برنامه نویسان بتوانند هرچه سریعتر و بهتر برنامه هایی بسازند که از تمام ویژگی های یک گوشی هوشمند استفاده کند. آندروید به معنای واقعی “ باز” (Open) است، یعنی برنامه نویس می تواند از تمام قدرت یک تلفن همراه استفاده کند. آندروید امکان استفاده از توابع داخلی گوشی موبایل همچون شماره گیری، فرستادن SMS یا استفاده از دوربین گوشی را به برنامه نویسان می دهد تا بتوانند اپلیکیشن های قدرتمند و کاربردی برای کاربران بسازند.همانطور که دیدید یک زمانی اگه یادتون باشه هزاران بار تبلیغات می شد بچه هاتون و بیارید مرکز و تست بینایی بدن با این روش لازم نیست کلی الاف بشین تو مطب دنبال ویزیت باشین و پول کلان به جیب بعضیا که پزشکی رو با تجارت اشتباه گرفتن بریزید .
کافیه به سایتی که اعلام کردیم برید و به آسونی تست بدین http://www.didsanj.com/
پس متوجه می شید که اگه یک پزشکی تو یک جایی تخصص داشته باشه و برنامه نویسی و یا یک مغز متفکر کامپیوتری بتونه ایده ای بده که مردم راحت بشن فقط از دست یک برنامه نویس و یک مهندس کامپیوتر بر میاد.
فکر کنید برای درمان سرطان که هزار تا عکس می ندازن هر دکتری بری یک عکس جدید می خواد و پولشم که حالا یک طرف برنامه ای بسازن که عکس رو اسکن کنی بدی به کامپیوتر و به آسونی بگه مشکل از کجاست این یعنی محشر این یعنی راحتی بیماران
ان شاء الله مهندسان علم هوش مصنوعی کشور عزیمان ایران اختراعاتی به ثبت برسانند که مردم صد البته شهر ها که ترافیک و .... واقعا آسیب می زنه بهشون دیگه ترافیک نکشین
به امید پژوهش های دانشجویان و اساتید رشته کامپیوتر و صد البته اختراعات
ادامه مطـــلب در منبع...
طبق معمول برنامه های مبتنی بر دیتابیس MySQL، اولین گام ما ایجاد و تعریف ساختار پایگاه داده است که در اینجا با توجه به نیازمان ابتدا از طریق برنامه phpMyAdmin یا با استفاده از کدهای PHP، دیتابیس download را می سازیم (در این آموزش فرض بر این است که از طریق برنامه phpMyAdmin پایگاه داده را ساخته اید)، سپس کدهای زیر را (در صورت نیاز پس از اعمال تنظیمات اتصال) در دایرکتوری فرضی time-limit-download و با نام table_create.php در ریشه هاست یا در سرور مجازی اجرا می کنیم (باید این دایرکتوری را در فولدر www یا public_html و فایل را داخل آن داشته باشید).
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>وبگو | ساخت جدول دانلود مدت دار فایل</title>
<!-- http://webgoo.ir -->
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
.ltr{
direction:ltr;
}
</style>
</head>
<body>
<?php
@$con = mysqli_connect('localhost', 'root', '', 'download');
//خطای اتصال
if(mysqli_connect_errno()){
echo 'اتصال با دیتابیس برقرار نشد:
<br>
<div class="ltr">
'.mysqli_connect_errno().' - '.mysqli_connect_error().'
</div>';
}
//اتصال برقرار است
else{
$query = mysqli_query($con, "CREATE TABLE file_storage(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
client_ip VARCHAR(255),
original_name VARCHAR(255),
temp_name VARCHAR(255),
date_time BIGINT(20)) ENGINE=MyISAM");
if(mysqli_errno($con)){
echo 'بروز خطا در ایجاد جدول:
<br>
<div class="ltr">'.mysqli_errno($con).' - '.mysqli_error($con).'</div>';
}
else{
$link = 'http://'.$_SERVER["SERVER_NAME"].'/time-limit-download/test.zip';
echo 'جدول با موفقیت ساخته شد.
<br>
<div class="ltr">
<a href="'.$link.'">'.$link.'</a>
</div>';
}
}
$close = mysqli_close($con);
?>
</body>
</html>
لینک اجرای فایل باید مطابق با نمونه زیر باشد.
http://localhost/time-limit-download/table_create.php
نکته: در این آموزش از اکستنشن mysqli استفاده شده که می توانید مطابق سلیقه از PDO یا حتی اکستنش اولیه mysql استفاده کنید (استفاده از این اکستنشن به جزء در موارد آموزشی و پروژه های قدیمی، توصیه نمی شود).
توضیح:
با اجرای فایل بالا جدولی با نام فرضی file_storage در دیتابیس download ایجاد می شود که این جدول دارای ستون هایی است که در قسمت CREATE TABLE پرس و جوی بالا ملاحظه می کنید، در زیر به صورت مختصر و جهت آشنایی نقش ستون ها را بررسی می کنیم.
ستون id: این ستون به عنوان یک شماره یکتا معمولا در اکثر برنامه های مبتنی بر دیتابیس استفاده می شود (جهت تمایز و مدیریت بهتر داده های مختلف)، نوع این ستون INT است که در این حالت تا مرز 2147483647 ردیف قابل ایجاد است.
ستون client_ip: این ستون برای نگهداری IP کاربر است که در هنگام تطبیق اطلاعات لینک می تواند مورد استفاده قرار گیرد (استفاده از IP صرفا جهت نمونه است و در صورت نیاز می تواند استفاده نشود).
ستون original_name: این ستون نام اصلی فایل را به همراه پسوند آن نگهداری می کند.
ستون temp_name: این ستون برای نگهداری نام hash شده فایل است (hash به عبارت رمزی شده گفته می شود که در مورد استفاده ما به آن token نیز گفته می شود).
ستون date_time: این ستون جهت نگهداری تاریخ و زمان با نمونه فرمت 20140101121110 (ثانیه دقیقه ساعت روز ماه سال) است، از این عدد برای محاسبه مدت زمان انقضای لینک دانلود استفاده می کنیم.
پس از ایجاد دیتابیس و جدول، اکنون باید کدی داشته باشیم که آدرس های موقت دانلود مدت دار فایل را برایمان ایجاد کند، در واقع در این مرحله به طور مثال کاربر لینک فرضی زیر را از سرور درخواست می کند و در پاسخ، لینک مدت دار به او نشان داده می شود.
نمونه لینک درخواستی کاربر:
http://localhost/time-limit-download/test.zip
نمونه آدرس ایجاد شده برای دانلود مدت دار:
http://localhost/time-limit-download/gCvHGkaDADuTbmq3dQsdSXyZ/test.zip
لذا کدهای زیر را در فایلی با نام download_link.php در دایرکتوری time-limit-download درج کنید.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>وبگو | ایجاد لینک دانلود مدت دار</title>
<!-- http://webgoo.ir -->
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
.ltr{
direction:ltr;
}
</style>
</head>
<body>
<?php
//تابعی برای ایجاد عبارت رندوم
function randomStr($length){
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$random_string = '';
for($i = 0; $i < $length; $i++){
$random_string .= $characters[rand(0, strlen($characters) - 1)];
}
return $random_string;
}
@$file = $_GET['file'];
if(!isset($file)){
echo 'مشکلی در دریافت اطلاعات فایل وجود دارد!';
}
else{
@$con = mysqli_connect('localhost', 'root', '', 'download');
//خطای اتصال
if(mysqli_connect_errno()){
echo 'اتصال با دیتابیس برقرار نشد:
<br>
<div class="ltr">
'.mysqli_connect_errno().' - '.mysqli_connect_error().'
</div>';
}
//اتصال برقرار است
else{
$temp = randomStr(24);
$date = date('YmdHis');
//مدت زمان اعتبار لینک به ثانیه
$time = date('YmdHis', time() - 60);
//ایمن سازی
$file = mysqli_real_escape_string($con, $file);
$ip = mysqli_real_escape_string($con, $_SERVER["SERVER_ADDR"]);
//حذف ردیف هایی که تاریخ اعتبار آنها گذشته است
$query = mysqli_query($con, "DELETE FROM file_storage WHERE date_time < '$time'");
//بررسی ip
$query = mysqli_query($con, "SELECT temp_name FROM file_storage WHERE client_ip = '$ip' AND original_name = '$file' LIMIT 1");
$count = mysqli_num_rows($query);
//استفاده از لینک موجود
if($count > 0){
while($row = mysqli_fetch_array($query)){
$temp = $row['temp_name'];
//آپدیت زمان
$update = mysqli_query($con, "UPDATE file_storage SET date_time = '$date' WHERE client_ip = '$ip' AND original_name = '$file' LIMIT 1");
}
}
//ایجاد لینک جدید
else{
$query = mysqli_query($con, "INSERT INTO file_storage(
client_ip, original_name, temp_name, date_time)
VALUES('".$ip."', '".$file."', '".$temp."', '".$date."')");
}
if(mysqli_errno($con)){
echo 'بروز خطا در ذخیره و ایجاد لینک دانلود:
<br><div class="ltr">'.mysqli_errno($con).' - '.mysqli_error($con).'</div>';
}
else{
$link = 'http://'.$_SERVER["SERVER_NAME"].'/time-limit-download/'.$temp.'/'.$file.'';
echo 'لینک دانلود با موفقیت ساخته شد:
<br>
<div class="ltr">
<a href="'.$link.'">'.$link.'</a>
</div>';
}
}
$close = mysqli_close($con);
}
?>
</body>
</html>
توضیح:
منطق به کار رفته در این قسمت خیلی پیچیده نیست، ابتدا فایل درخواستی کاربر از سرور از طریق متد GET دریافت شده و پیش از ایجاد لینک جدید، وجود IP کاربر و نام فایل مشابه در دیتابیس بررسی می شود، اگر فایل مشابهی با این IP در دیتابیس باشد، ضمن به روز رسانی مدت زمان اعتبار لینک، از اطلاعات موجود برای نمایش لینک دانلود مدت دار استفاده می شود، در غیر این صورت (یعنی اگر اطلاعاتی مطابق با IP و نام اصلی فایل در دیتابیس موجود نباشد)، لینکی با اطلاعات جدید ساخته و در دیتابیس نیز INSERT می شود.
نکته 1: ملاحظه می کنید که پیش از هر گونه اقدامی، ابتدا دستور حذف ردیف های تاریخ گذشته را اجرا کرده ایم.
نکته 2: مدت اعتبار لینک با تغییر مقادیر عددی در متغیر time قابل تغییر است، در این مثال ما از عدد 60 ثانیه استفاده کرده ایم که می توان مطابق نیاز آن را افزایش یا احیانا کاهش داد.
نکته 3: بررسی وجود IP و لینک موجود به این دلیل ممکن است ضروری باشد که معمولا علاوه بر مرورگر، برنامه های مدیریت دانلود مانند IDM نیز (هم زمان با مرورگر و به صورت مخفیانه) درخواستی به سرور ارسال می کنند که در این صورت برای یک فایل، دو ردیف و دو لینک دانلود مجزا در دیتابیس خواهیم داشت که قاعدتا یک مورد آن زائد است.
نکته 4: همان طور که پیش تر گفته شد، این برنامه صرفا یک الگو است و می توان بر اساس نیاز خود بخش هایی از آن را حذف یا مواردی اضافه نمود (منتها باید نسبت به انجام این مورد مسلط باشید!).
پس از ایجاد و ذخیره لینک دانلود مدت دار، قاعدتا این لینک باید توسط کاربر نهایی جهت دانلود فایل استفاده شود، لذا بدین منظور در دایرکتوری time-limit-download فولدر دیگری با نام file ساخته و درون آن فایلی با نام download_file.php می سازیم، کدهای این فایل وظیفه بررسی لینک درخواستی و در صورت تائید، ارسال فایل به مرورگر را به عهده خواهند داشت.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>وبگو | دانلود فایل مدت دار</title>
<!-- http://webgoo.ir -->
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
.ltr{
direction:ltr;
}
</style>
</head>
<body>
<?php
@$token = $_GET['token'];
@$file = $_GET['file'];
if(!isset($file) || !isset($token)){
echo 'مشکلی در دریافت اطلاعات فایل وجود دارد!';
}
else{
@$con = mysqli_connect('localhost', 'root', '', 'download');
//خطای اتصال
if(mysqli_connect_errno()){
echo 'اتصال با دیتابیس برقرار نشد:
<br>
<div class="ltr">
'.mysqli_connect_errno().' - '.mysqli_connect_error().'
</div>';
}
//اتصال برقرار است
else{
$date = date('YmdHis');
//مدت زمان اعتبار لینک به ثانیه
$time = date('YmdHis', time() - 60);
//ایمن سازی
$token = mysqli_real_escape_string($con, $token);
$file = mysqli_real_escape_string($con, $file);
//حذف ردیف هایی که تاریخ اعتبار آنها گذشته است
$query = mysqli_query($con, "DELETE FROM file_storage WHERE date_time < '$time'");
//بررسی اطلاعات فایل درخواستی کاربر با سرور
$query = mysqli_query($con, "SELECT temp_name FROM file_storage WHERE original_name = '$file' AND temp_name = '$token' LIMIT 1");
$count = mysqli_num_rows($query);
//اطلاعات فایل معتبر است
if($count > 0){
//تابع برای بدست آوردن پسوند فایل
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;
}
//ارسال فایل به مرورگر برای دانلود
$file_name = $file;
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");
}
//لینک فایل معتبر نیست یا فایل حذف شده
else{
echo 'فایل مورد نظر یافت نشد!';
}
}
$close = mysqli_close($con);
}
?>
</body>
</html>
توضیح:
عملکرد این کد به این صورت است که پارامتر hash یا همان token ارسالی از کاربر و همچنین نام حقیقی فایل را که از طریق لینک مدت دار دانلود دریافت شده با دیتابیس تطبیق داده و در صورتی که اطلاعات معتبر باشد، فایل موجود در دایرکتوری file را به مرورگر (یا هر واسط کاربری دیگر مانند برنامه های مدیریت دانلود) ارسال می کند.
در آخرین گام از ایجاد لینک دانلود مدت دار نیاز به دستورات htaccess زیر در ریشه سایت است تا بتوانیم آدرس های استاتیک (آدرس هایی که در آنها علامت ? نباشد) را ایجاد و استفاده کنیم، لذا بدین منظور اگر فایل htaccess. در ریشه سایت وجود دارد، کافی است دستورات جدید را در انتها اضافه کنید، اما اگر این فایل وجود ندارد باید آن را بسازید و کدها را در آن درج نمائید.
RewriteEngine on
RewriteRule time-limit-download/([^/]+)/([^/]+)(\.zip|\.pdf|\.jpg)$ /time-limit-download/file/download_file.php?token=$1&file=$2$3 [NC,L]
RewriteRule time-limit-download/([^/]+)(\.zip|\.pdf|\.jpg)$ /time-limit-download/download_link.php?file=$1$2 [NC,L]
دو دستور بالا به ترتیب برای دریافت لینک مدت دار (token و نام اصلی فایل) و لینک عادی فایل (بدون token) کاربرد دارد.
نکته: اگر از فعال بودن Rewrite Engine در سرور مجازی خود مطمئن نیستید، لطفا در این خصوص در وب جستجو کنید.
با سلام خدمت کاربران عزیز گروه کامپیوتر دانشگاه آزاد در خدمتتون هستیم با اموزش کار با زمان و تاریخ در پی اچ پی
امیدوارم این سری آموزش مورد توجه شما دوستان عزیز قرار بگیره
تاریخ و زمان چیزهایی هستند که ما به طور زیادی با آن ها هر روز سر و کار داریم و در برنامه نویسی هم به درد ما می خورند. php برای ما توابعی را آماده کرده که می توانیم با استفاده از آن ها کارهای زیادی را انجام دهیم. اصلی ترین تابع برای تاریخ و زمان، تابع date() می باشد که در ادامه به توضیح آن می پردازیم.
این تابع برای ساختن فرمت های مختلف تاریخ ویا زمان است. این تابع دو پارامتر دارد که یکی برای فرمت خروجی تاریخ (پارامتر format) و دیگری timestamp یا مهر زمانی می باشد. واردکردن پارامتر timestamp دلخواه می باشد و این پارامتر پایه و منباء اطلاعاتی که پارامتر format دریافت می کند را تنظیم می کند (اگر ابهامی احساس می کنید در ادامه رفع خواهد شد). شکل کلی این تابع به صورت زیر است:
date(format, timestamp);
ارامتر format باید به شکل رشته ای وارد شود. این رشته باید دارای فرمت خاصی باشد که تنها مقادیر خاصی می تواند در آن قرار گیرد. در زیرجدولی را مشاهده می کنید که شامل این کاراکتر ها می باشد:
| کاراکتر | توضیحات |
| d | روز از ماه را به شکل عدد دورقمی نشان می دهد (از 01 تا 31). |
| D | روز هفته را به صورت سه حرفی نشان می دهد. |
| j | روز را به صورت عدد 1 یا دوحرفی بدون صفر پیش از آن نشان می دهد (از 1 تا 31). |
| l | روز هفته را به صورت کامل نشان می دهد. |
| N | روز هفته به شکل عددی نشان می دهد (از 1 تا 7). |
| S | پسوند تاریخ را به شکل انگلیسی نشان می دهد (st، nd، rd یا th). |
| w | روز هفته را به شکل عددی نشان می دهد (از 0 تا 6). |
| z | روز از سال را نشان می دهد (از 0 تا 365). |
| W | شماره هفته از سال را نشان می دهد. |
| F | نام کامل ماه را نشان می دهد. |
| m | شماره ماه به شکل عددی را همراه با صفر پیش از آن نشان می دهد (از 01 تا 12). |
| M | نام ماه را به صورت سه حرفی نشان می دهد. |
| n | شماره ماه بدون صفر پیش از آن را به شکل عددی نشان می دهد (از 1 تا 12). |
| t | تعداد روزهای ماه را نشان می دهد. |
| L | سال کبیسه را نشان می دهد (اگر سال کبیسه باشد 1 درغیر این صورت 0). |
| o | شماره سال را به شکل عددی نشان می دهد. |
| Y | شماره سال را به صورت 4 حرفی نشان می دهد. |
| y | شماره سال را به صورت 2 حرفی نشان می دهد. |
| a | am(قبل از ظهر) یا pm(بعد از ظهر) را با حروف کوچک نشان می دهد. |
| A | Am یا PM را با حروف بزرگ نشان می دهد. |
| g | ساعت را به صورت 12 ساعته و بدون صفر پیش از آن نشان می دهد (از 1 تا 12). |
| G | ساعت را به صورت 24 ساعته و بدون صفر پیشین نشان می دهد (از 0 تا 23). |
| h | ساعت را به صورت 12 ساعته و همراه با صفر پیشین نشان می دهد (از 01 تا 12). |
| H | ساعت را به صورت 24 ساعته و همراه با صفر پیشین نشان می دهد (از 00 تا 23). |
| i | دقیقه را همراه با صفر پیشین نشان می دهد (از 00 تا 59). |
| s | ثانیه را همراه صفر پیشین نشان می دهد (از 00 تا 59). |
| u | میکروثانبه را نشان می دهد. |
| e | منطقه زمانی را نشان می دهد (مانند gmt یا utc). |
| O | تفاوت زمانی با زمان گرینویچ را به ساعت نشان می دهد. |
| P | تفاوت زمانی با گرینویچ را به ساعت و دقیقه نشان می دهد. |
همین که می بینید حروف کوچک و بزرگ مقادیر مختلفی را دارا هستند و باید در این مورد دقت لازم را به جا آورید.
این کاراکترها می توانند با یکدیگر ترکیب شوند و یک فرمت زمان یا تاریخ را بسازند. همچنین از کاراکترهای دیگری مانند ، – . و… برای جداسازی عددهای مختلف استفاده کرد.
مثال:
در این مثال تاریخ و زمان را بوسیله تابع date چاپ می کنیم:
<?php
echo "Today is: ".date("Y/n/d")."<br/>";
echo "and time is: ".date("g:i:s a");
?>

date_default_timezone_set("Asia/Tehran");
<?php
date_defult_timezone_ser("asia/tehran"); echo "Today is: ".date("Y/n/d")."<br/>";
echo "and time is: ".date("g:i:s a");
?>

با سلام خدمت کاربران عزیز گروه کامپیوتر دانشگاه آزاد امروز با آموزش کاربردی در خدمت شما هستیم که دیگه مشکل ارسال برنامه های دانلود شده و خریداری شده از بازار رو نداشته باشین
این مطلب اختصاصی است لطفا با ذکر منبع به اشتراک بگذارید :
در نسخههای قدیمی بازار برنامههای دانلود شده در مسیر زیر قرار میگرفتند :
sdcard > icm > bazaar > downloads
ولی در ورژن جدید اینگونه نیست و بعد از نصب برنامهها، فایل اصلی آنها حذف میشوند که میتوانید به این صورت عمل کنید : بعد از دانلود فایل بجای نصبه آن دکمه Home را بزنید و از نصب خارج شوید، به قسمت Android در حافظه گوشی یا مموی کارت رفته و سپس وارد پوشهی data و بعد از آن به دنبال پوشه ای به نام com.farsitel.bazaar بگردید، داخل شوید و نرمافزار را به جای دیگری انتقال دهید.
Android > Data > com.farsitel.bazaar > files
با سلام خدمت دوستان و کاربران عزیز با مطلبی جدید در خدمت شما دوست داران گروه کامپیوتر دانشگاه آزاد هستیم
امروز با آموزش " پست پازلی " یا به عبارتی " پست ادامه دار" در اینستگرام در خدمتتون هستیم
در این آموزش می توان عکسی مانند زیر در اینستاگرام ترتیب داد . . .

بصورت خلاصه وارد این بشیم که چطور می تونیم پست پازلی خود را در اینستا درست کنیم نکته این است که هر عکس اینستا در اندازه ی سایز زیر باید باشد :
width=459 و Height=457
پس برای اینکه ما یک عکس 3 تایی داشته باشیم مانند عکس بالا باید در فتوشاپ ابعادی به ابعاد
1377=3*width=459 و Height=457
پیکسل پروژه ای را ایجاد کنیم .
ما برای راحتی کار فایل فتوشاپ را در آخر مطلب برای دانلود گذاشته ایم.
سپس کافیست یک عکس را داخل پروژه ایمپورت کنید و ابعاد آن را Fit اندازه ی بالا قرار دهید
سپس فایل خود را با پسوند Jpg یا Png ذخیره کنید .
سپس عکس را به موبایل خود انتقال دهید از طریق Usb یا مموری و یا Bluetooch
سپی به گالری موبایل اندروید خود رفته و عکس مورد نظر را باز کنید سپس گزینه اشتراک گذاری را کلیک کرده و اینستاگرام را انتخاب فرمائید
بعد از انتخاب قسمت تنظیمات یا برش اینستاگرام CROP بعد از چند ثانیه تصویر شما رو لود کرده و از اینجاست که قسمت اصلی مطلبمان شروع م شود
چون عکس های گذشته به ترتیب چینش به سمت راست شیفت می شوند پس کافیست حین کراپ بدون زوم یا آن زوم قسمت سمت راست رفته و کاملا به دیواره سمت راست عکس بچسبید و عکس اول را سند کنید
سپس دوباره به گالری رفته و اشتراک گذاری اینستاگرام و اینبار قسمت بعد از قسمت سمت راست یعنی وسط عکس را انتخاب Crop کرده و آن را ارسال نمائید و سپس آخرین مرحله کاملا به دیواره سمت چپ چسبیده و عکس سوم را ارسال فرمائید
دانلود فایل فتوشاپ با فرمت Psd
رمز فایل : unitazad.ir دقت در وارد کردن حروف (تمامی حروف با حروف کوچک انگلیسی می باشد)
با تشکر از شما دوستان عزیز ببخشید چند دقیقه ای وقت شما رو گرفتیم اشکالی داشتید در بخش نظرات حتما درج فرمائید ممنونیم
ادامه مطـــلب در منبع...Remote debugging همیشه یکی از چالش های طراحی صفحات وب برای گوشی های هوشمند، تست و خطایابی آنها درون محیط واقعی آنها است. برای این مشکل، راه حل هایی البته وجود دارد. سایت های وجود دارند که عکسی از صفحه شما درون دستگاه های مختلف میدهند. همچنین پکیج هایی نیز برای زبان Node js نوشته شده است که میتوانید گوشی را به سیستم متصل کنید، که به این صورت کارتان را بسیار ساده تر میکنند. اما اگر بخواهیم از این هم ساده تر سایت ریسپانسیو را درون گوشی یا تبلتمان چک کنیم، چه راه حلی وجود دارد؟ راه حل استفاده از مرورگر گوگل کروم است. این مرورگر از نسخه 32 به بعد قابلیتی به نام Remote debugging را به خودش اضافه کرده است که در آن به راحتی میتوانید گوشی را به سیستم متصل کنید و همچنین میتوانید سایت باز شده درون گوشی را از طریق سیستم inspect کنید.
نسخه کروم در سیستم باید از ورژن 32 به بعد باشد
یک کابل برای متصل کردن گوشی یا تبلت به سیستم موجود باشد
و نسخه اندروید باید از ورژن 4.0 به بعد باشد
البته خود گوگل این نکته را هم گوشزد کرده است که نسخه کروم درون سیستم باید یک ورژن بالاتر از نسخه کروم درون گوشی یا تبلت باشد. البته استفاده از نسخه های هم ورژن نیز دارای احتمال خطای خیلی کمی هستند.
1. فعال کردن USB Debugging ابتدا به تنظیمات اندروید رفته و به قسمت Developer options وارد شوید. در این قسمت، USB debugging را فعال کنید و پیغام هشدار آن را نیز تایید کنید.
اگر قسمت Developer options برای شما قابل مشاهده نیست در تنظیمات اندروید به قسمت About phone رفته و بر روی گزینه Build number هفت بار تپ (کلیک) کنید تا این قسمت در تنظیمات اندروید قابل مشاهده شود.
![]() |
![]() |
![]() |
![]() |
حالا با استفاده از کابل مناسب، گوشی را به سیستم متصل کنید. اگر بر روی سیستم عامل ویندوز کار میکنید، مطمئن شوید که درایور مناسب گوشی، نصب شده باشد.
یک برنامه کروم را درون گوشی خود اجرا کنید.
در مرورگر کروم سیستم به صفحه chrome://inspect رفته و گزینه Discover USB devices را فعال کنید.

بعد از فعال کردن این گزینه احتمالا در گوشی شما یک پیغام مبنی بر اجازه دسترسی صادر میشود که شما آن پیغام را تایید کنید.
خب در صفحه chrome://inspect تمام دستگاه های متصل شده به سیستم و تب های اجرا شده در کروم دستگاه ها را نشان میدهد، که شما نیز الان باید اطلاعاتی مشابه عکس زیر را مشاهده کنید.
حالا به راحتی میتوانید تب های اجرا شده درون گوشی های هوشمندتان را از طریق سیستم، inspect کنید که اینکار با کلیک بر روی عبارت inspect انجام میشود.
با اینکار یک صفحه Developer tools کروم برای شما باز میشود که تمام ویژگی های یک Developer tools معمولی را دارد و به راحتی میتوانید به inspect کردن بپردازید.
نکته : اگر در پنجره باز شده با خطا مواجه شدید (احتمالا خطای تحریم گوگل)، باید با IP غیر ایرانی صفحه inspect را باز کنید.
ادامه مطـــلب در منبع...