با فایل .htaccess کنترل را در دست بگیرید – قسمت دوم

۱۲ مهر ۱۳۸۸ | by رحمان موسویان | دسته‌بندی نشده‌ها

مهر
۱۲

در ادامه بحث Authorization می‌خوام دو تا از دستوراتی را معرفی کنم که شبیه دستورات شرطی عمل می‌کنند. اولین <Files></Files> و دیگری <Directory></Directory> است. Filesبر روی فایل‌ها و Directory بر روی شاخه‌ها اعمال می‌شوند. به مثال زیر توجه کنید:

<Files *.jpg>

Order Allow,Deny

                             Allow from 123.123.123.123

</Files>

 

با این دستور، و البته با فرض اینکه IP سرور شما ۱۲۳٫۱۲۳٫۱۲۳٫۱۲۳ باشد، شما اجازه استفاده از عکس ها را فقط به سرور خود میدهید. در این صورت اگر در سرورهای دیگر عکسی با منبع سایت شما داشته باشند، سرور شما از نمایش آن جلوگیری خواهد کرد. با این روش شما از افتادن ترافیک سایت‌های دیگر بر دوش سرور خود جلوگیری می‌کنید. یا یک مثال کاربردی‌تر اینکه

<Files *.php>

                             Order Allow,Deny

</Files>

با این کار از اجرا و نمایش تمام فایل های php جلوگیری می‌کنید. البته نکته مهمی وجود دارد و آن این است که برای دستوراتی شبیه require و include در برنامه نویسی مشکلی از نظر دسترسی پیش نخواهد آمد. اما اگر به جای PHP تمام فایل‌ها را در این ماجرا شریک کنید (توسط*.* ) ، نمی توانید فایل‌های CSS یا JS را در برنامه خود استفاده کنید. چون این فایل‌ها توسط مرورگر شناسایی شده و درخواست آنها صادر می‌شود (برخلاف php که موقع اجرا توسط آپاچی اضافه می‌شوند.)

 

Redirect 

انتقال شاخه‌ به مسیر جدید به دو حالت صورت می‌گیرد؛ شکل ساده و شکل دارای عبارت منظم. این انتقال توسط کد ۳۰۱ به مرورگر ارسال شده است. در صورتی که این کد نوشته نشود، بصورت پیش‌فرض ۳۰۲ ارسال خواهد شد. این کدها از نظر موتورهای جستجوگر بسیار مهم است و کسانی که روی سئو SEO یا Search Engine Optimization کار می‌کنند باید به این‌ها نیز توجه کنند.

Redirect 301 /olddir/oldfile.html http://example.com/newdir/newfile.html

RedirectMatch 301 /oldDir/(.*) /newDir/$1

 

۳۰۱ – Moved Permanently یا انتقال دائمی. در صورتی که برای همیشه از مسیر جدید استفاده خواهید کرد، حتما” توسط کد ۳۰۱ صفحه را ارسال کنید. با این کار موتورهای جستجو آدرس جدید را بجای آدرس قبلی قرار خواهند داد.

۳۰۷ – Temporary Redirect یا انتقال موقت.
مدیریت خطاها (Error Handling)

لیست کاملی از خطاهایی که میتوانید به جای نمایش آنها، این صفحات را برای خود سفارشی کنید:

ErrorDocument 400 /errors/file.php?error=400
ErrorDocument 401 /errors/file.php?error=401
ErrorDocument 402 /errors/file.php?error=402
ErrorDocument 403 /errors/file.php?error=403
ErrorDocument 404 /errors/index.php?error=404
ErrorDocument 405 /errors/index.php?error=405
ErrorDocument 406 /errors/index.php?error=406
ErrorDocument 407 /errors/index.php?error=407
ErrorDocument 408 /errors/index.php?error=408
ErrorDocument 409 /errors/index.php?error=409
ErrorDocument 410 /errors/index.php?error=410
ErrorDocument 411 /errors/index.php?error=411
ErrorDocument 412 /errors/index.php?error=412
ErrorDocument 413 /errors/index.php?error=413
ErrorDocument 414 /errors/index.php?error=414
ErrorDocument 415 /errors/index.php?error=415
ErrorDocument 416 /errors/index.php?error=416
ErrorDocument 417 /errors/index.php?error=417
ErrorDocument 500 /errors/index.php?error=500
ErrorDocument 501 /errors/index.php?error=501
ErrorDocument 502 /errors/index.php?error=502
ErrorDocument 503 /errors/index.php?error=503
ErrorDocument 504 /errors/index.php?error=504
ErrorDocument 505 /errors/index.php?error=505

در مواقع رخ دادن هرکدام از این خطاها، صفحه به آدرس مورد نظر ارجاع داده خواهد شد. در ضمن میتوانید یک پیغام را نمایش دهید:

ErrorDocument 404 “<b>Page Not Found</b>”

 

تنظیمات PHP (php.ini) 

فلگ‌ها توسط php_flag و مقادیر توسط php_value کنترل می‌شوند.نمونه‌هایی را در زیر می‌بینید:

php_flag asp_tags off
php_flag register_globals off
php_flag session.auto_start on
php_flag display_errors off
php_value upload_max_filesize 8M
php_value session.cookie_lifetime 3600

 

گروه دستورات بعدی توسط ماژول mod_mime اجرا می‌شوند و فایل مبدأ آنها mod_mime.c است. این ماژول امکاناتی را برای مشخص کردن تایپ فایل‌ها و مشخصات آنها فراهم می‌آورد.(در واقع محتوای Header هدر صفحه کنترل می‌شود.)

AddDefaultCharset utf-8

AddCharset windows-1256 .html

AddLanguage fa .php

اگر واقعا” از نوشتن متاتگ برای ست کردن charset خسته شده‌اید، خط اول بسیار به کار شما می‌آید. AddCharset نیز charset مورد نظر را فقط برای پسوند خاصی ست می‌کند. AddLanguage نیز زبان فارسی (یا مخفف آن fa) را به Content-Language در Header صفحات پی اچ پی اضافه میکند.

AddEncoding x-gzip .gz
AddEncoding x-compress .z

این دستور نیز برای ست کردن Content-Encoding هدر بکار می‌رود.

 

AddType image/gif .photo

AddType application/x-httpd-php .asp .jsp

AddType text/css .mycssext

خب این قسمت خیلی جذاب و کاربردی است. شما توسط AddType یک تایپ جدید یا پسوند جدید تعریف می‌کنید. با این کار هکرها به راحتی متوجه php بودن کد شما نمی‌شوند. (البته اگر مسائل دیگری مثل X-Powered-By را درنظر گرفته باشید!!) برای مثال من در خط اول، پسوندهای photo را عکس‌های gif معرفی کرده‌ام. خط دوم، خواسته‌ام که تمام فایل‌هایی با پسوند asp یا jsp نیز از نوع  phpشناخته شوند و توسط مترجم php اجرا شوند. در نهایت گفته‌ام که پسوندهایی mycssext فایل‌های مربوط به css هستند. بعنوان مثال شاید کاربرد این دستور را در سایت بانک ملت (فایل‌هایی با پسوند bm) دیده باشید!

<Location /images>

    ForceType image/gif

</Location>

درصورتی که فایل‌های شاخه images توسط مرورگر درخواست شوند، جدای از پسوند آنها، مرورگر مجبور به پردازش آنها بعنوان عکس با پسوند gif خواهد بود.

نظرات »

با فایل .htaccess کنترل را در دست بگیرید – قسمت اول

۱۱ مهر ۱۳۸۸ | by رحمان موسویان | دسته‌بندی نشده‌ها

مهر
۱۱

چند پست قبل یکی از کاربردهای این فایل رو بررسی کردم، اما در این پست می‌خوام بطور کامل در مورد این فایل صحبت کنم.

بدلیل نیاز طراحان و برنامه‌نویسان وب برای تغییر و کنترل وب سرور آپاچی بسته به نیاز خود و با هدف ایجاد کنترل دسترسی بر روی شاخه‌های مختلف فایل‌های .htaccess (یا hypertext access یا distributed configuration files) بوجود آمدند. چون در سیستم عامل های Unix فایل‌هایی که با نقطه (dot) شروع می‌شوند مخفی هستند، نام این فایل با نقطه شروع می‌شود و بهمین دلیل این فایل در سیستم عامل ویندوز بطور معمولی قابل ایجاد نیست. اگر از سیستم عامل ویندوز استفاده میکنید، برای ساختن این فایل میتوانید از این اسکریپت php کمک بگیرید:

[code='php']
$fp=fopen('.htaccess','w+');
fclose($fp);
?>
[/code]

این فایل در هر شاخه می‌تواند ایجاد شود و قوانین آن بر روی شاخه جاری و تمام زیرشاخه‌ها اعمال می‌شود. از عمده‌ترین موارد استفاده فایل .htaccess میتوان به تصدیق و اجازه (Authentication  و Authorization )، ترجمه‌ی URLها و مدیریت خطاها اشاره کردکه در زیر به شرح آنها خواهم پرداخت.

 

تصدیق کاربر (Authentication)

امکانی که به شخصی‌سازی صفحات وب کمک میکند.

AuthType Basic

AuthUserFile /usr/username/.htpasswd

AuthName “My Secret Area”

Require valid-user

خط اول، توع تصدیق را Basic معرفی میکند. دومین خط مسیر کامل (و نه نسبی) فایل حاوی نام کاربری و رمزعبور است. لیست نام‌های کاربری و رمزهای عبور در این فایل که با نام .hpasswd مشخص میشود بصورت زیر است:

username1:password1

username2:apr1.KB4i…ykeDUewbZvNgqrlXnecld0

درمورد دومین خط رمزعبور باید بگم که شما میتونید رمزعبور خودتون رو بصورت کد شده توسط الگوریتم MD5 بگذارید. سایت‌هایی هستند که این کار رو انجام میدهند مثل این.

سومین خط این کد، توضیحی است که به کاربر درمورد درخواست رمزعبور نمایش داده می‌شود.

و بالاخره خط چهارم این امکان را فعال می‌کند.

 

اجازه‌های دسترسی (Authorization)

که با دو دستور Allow یا Deny و توسط ماژول mod_access صورت می‌گیرد. این اجازه‌ها می‌توانند بر روی نام میزبان، IP کاربر، نوع درخواست(یا Environment Variables) صورت گیرند. به مثال توجه کنید:

Allow from apache.org

Deny from 10.1.2.3

Deny from 10.1

Deny from 10.1.0.0/255.255.0.0

خط اول فقط به میزبان apache.org اجازه استفاده می‌دهد. خطوط بعدی اجازه را روی IP تعریف میکند.

SetEnvIf User-Agent Chrome let_me_in

Order Deny,Allow

Deny from all

Allow from env=let_me_in

این چهار خط بطور کلی دسترسی را برای همه کاربران می بندد! البته کاربرانی که با مرورگر Chrome وارد شده باشند، اجازه ورود دارند! جالب است، نه؟! )برای اینترنت اکسپلورر: MSIE، موزیلا فایرفاکس: Firefox و اپرا:Opera  تایپ کنید)

در مورد Order، همین طور که از نامش مشخص است، اولویت دستورهای Deny و Allow را مشخص میکند. شاید در این دستور نیازی به آن نباشد ولی درصورت نوشتن کدهای زیاد برای دسترسی های مختلف، ترتیب اولویت‌ها نیاز به مشخص شدن دارند.

Order Allow,Deny

به این معناست که تمام درخواست‌هایی که با حداقل یکی از گزینه های Allow مطابقت داشته باشند، اجازه ورود دارند. سپس درخواست‌هایی هم که با Deny مطابقت دارند ریجکت شده و بعد از آن تمام درخواست‌ها ریجکت می‌شوند.

Order Deny,Allow

نیز به این معناست که اول از تمام درخواست‌هایی که با Deny مطابقت دارند جلوگیری می‌شود. سپس بقیه درخواست‌ها پذیرفته می‌شوند. با این حساب کد زیر از نظر عملکرد شبیه کد بالاست:

SetEnvIf User-Agent MSIE let_me_in

Order Allow,Deny

Allow from env=let_me_in

و جدول خلاصه:

         نتیجه در Allow,Deny

نتیجه در Deny,Allow

مطابقت 

پذیرفته می‌شود

پذیرفته می‌شود

فقط با Allow

رد می‌شود

رد می‌شود

فقط با Deny 

رد می‌شود

پذیرفته می‌شود

بدون مطابقت 

رد می‌شود

پذیرفته می‌شود

با هر دو 

نکته ۱: تمام درخواست‌هایی که توسط Deny رد میشوند، با خطای ۴۰۳ (Forbidden) بازگردانده می‌شوند.

نکته ۲: چنین شرط هایی که مرورگر کاربر را چک میکنند، امنیت ضعیفی دارند چون UserAgent یا هدر مشخص کننده مرورگر کاربر، قابل تغییر است!

نظرات »

CUL.ir سایتی برای کاهش طول پیوندها با ایده‌های نو

۱۰ مهر ۱۳۸۸ | by رحمان موسویان | دسته‌بندی نشده‌ها

مهر
۱۰

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

سایت cul.ir به همین منظور ایجاد و مورد استفاده قرار گرفته است. البته خدماتی که این سایت به کاربران خود می‌دهد، دقیقا” شبیه رقبای خود نیست و ایده‌‌ و نوآوری‌ را همراه داشته است که به آنها اشاره می‌کنم.

جالب‌ترین امکانی که سایت cul.ir به شما میدهد این است که شما در هر لحظه و در هر صفحه‌ای از وب که باشید، قادرید همان آدرس جاری را در سایت cul.ir ثبت و لینک کوتاه شده آن را دریافت کنید. بدین صورت که بعنوان مثال من در آدرس:

http://www.xn--mgbx7cghb83g.com/1388/05/%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87%E2%80%8C%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9/

هستم. برای کوتاه کردن این لینک، کافی است در نوار آدرس مرورگر به اول این آدرس، آدرس سایت cul.ir را اضافه کنید که چیزی شبیه این میشود:

Cul.ir/ http://www.xn--mgbx7cghb83g.com/1388/05/%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87%E2%80%8C%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9/

بعد از وارد شدن به این آدرس، لینک کوتاه شده خود را دریافت کنید. :)

http://cul.ir/8f

بدون نظر »

اندازه‌گیری زمان اجرای توابع جاوا اسکریپت

۲۳ مرداد ۱۳۸۸ | by رحمان موسویان | javascript, Mozilla FireFox, مرتبط با وب 2

مرداد
۲۳

بعضی اوقات پیش اومده که ما یک تابع یا کلا” انجام یک کاری توسط جاوا اسکریپت رو به چندین حالت مختلف برنامه نویسی میتونیم بنویسیم یا انجام بدیم. برای سایت های کوچک و سایتی که استفاده خیلی کمی از جاوا اسکریپت استفاده میکنند شاید مورد مهمی به نظر نیاید اما برای سایت های وب ۲ و سایت هایی که استفادی زیادی از تکنولوژی های جدید جاوا اسکریپت مثل آژاکس (Ajax) میکنند در نظر گرفتن زمان اجرا میتواند عامل بسیار مهمی باشد. البته باید در نظر داشت که کاربران امروزه از تب ها برای استفاده از سایت های مختلف اسفاده میکنند نه از پنجره های متعدد. و این عامل را حتما” باید در نظر داشت که وقتی شما موتور یک مرورگر را مثلا” برای اجرای جاوا اسکریپت در اختیار میگیرید، مسلما” برای تب های دیگر درصد کمتری اختصاص می یابد. بنابراین درصورتی که سایت شما کدهای سنگینی داشته باشد، علاوه بر سایت شما، باعث کند شدن مرورگر هم شده و کاربر را بشدت ناراضی میکند.
و این ها دلایلی است که باعث میشود که زمان اجرای توابع جاوا اسکریپت برای ما اهمیت پیدا کند.
در فایرباگ (Firebug) در قسمت Console تبی با نام Profile وجود دارد که این کار را انجام میدهد! برای مثال شما تابعی نوشته‌اید و میخواهید زمان اجرای آن را اندازه گیری کنید. برای این کار کافیست ابتدا یک بار دکمه Profile را بزنید و سپس آن تابع را اجرا کنید. حال دوباره دکمه Profile را بزنید تا زمان اجرای آن را با تمام جزئیات ببینید.
اگر قصد دارید چندین تابع را با هم مقایسه کنید، تمام توابع را بعد از زدن دکمه Profile اجرا کنید و اگر میخواهید کل اسکریپت(script) های سایت را بررسی کنید، بعد از زدن دکمه Profile صفحه را رفرش کنید و دوباره Profile را بزنید.
برای مثال به عکس زیر توجه کنید.


من برای یک درخواست Ajax و اجرای یک تابع بعد از آن، کدی نوشتم (البته با استفاده از کتابخانه jQuery) و آنرا اجرا کردم که نتیجه آنرا میبینید.
توابعی که نام آنها بصورت (?)() است، توابع داخلی هستند که نام خاصی ندارند. برای مثال:
[code="js"]
(function(){
// Do something;
})();
[/code]
ستون Calls تعداد دفعات اجرای هرکدام از توابع در مدت زمانی است که شما Profile را نگه میدارید. برای مثال تابع success یکبار اجرا شده است.
ستون Percentage درصد زمان سپری شده نسبت به کل توابع مورد بررسی قرار گرفته برای این تابع را نمایش میدهد.
ستون Own Time مدت زمان اختصاصی هر تابع را نمایش میدهد. این زمان شامل مدت زمان سپری شده برای توابعی که از داخل این تابع فراخوانی شده اند، نمی باشد.
ستون Time زمان کل هر تابع، با در نظر گرفتن تمام توابع فراخوانی شده از داخل آن میباشد.
ستون های Avg,Minو Max هم بترتیب میانگین، حداقل و حداکثر زمانها را برای هر تابع نمایش می دهد.
در نهایت هم File، لینکی به آدرس فایلی که این تابع در آن قرار دارد برای دسترسی سریع تر برقرار کرده است.

نظرات »

خطای ۴۰۴ و مدیریت آن

۲۷ تیر ۱۳۸۸ | by رحمان موسویان | تجربه ها

تیر
۲۷

یک مشکلی که اخیرا” داشتیم این بود که تعدادی از کالاهای سایت عکس نداشتند و همین باعث میشد که علاوه بر اینکه عکس نمایش داده نشه و ظاهر سایت بهم بخوره، خطاهایی ناشی از فراخوانی تابع getimagesize هم در صفحه نمایش داده میشد.

خلاصه تصمیم بر این شد که عکسی بذاریم پیش فرض!، که اگه کالایی عکس نداشت موقتا” این عکس جایگزین بشه.

یک کاری که میشد انجام بدیم، اینکه سر هر جایی که فیلد آدرس عکس رو از پایگاه داده میخوندیم، شرط بذاریم ولی خیـــــلی بود!

پس دنبال راه بهتری که استفاده از فایل .htaccess بود،رفتیم.

به این صورت که اگه فایل .htaccess رو با محتوای زیر برای مثال در شاخه Folder قرار بدین، آن شاخه تمام زیر شاخه های آن مشمول این قانون میشوند.

پیدا نشدن فایل درخواستی مرورگر باعث میشه که سرور خطای ۴۰۴ رو برگرداند که ما این خطا رو میگیریم و redirect میکنیم به سمت عکس (یا بطور کلی صفحه)مورد نظر.

ErrorDocument 404 /notFound.htm

البته جز خطای ۴۰۴، بقیه خطاها هم قابل مدیریت شدن هستند. اطلاعات بیشتر

بدون نظر »

اعداد بزرگ در php 32 بیتی

۱۳ تیر ۱۳۸۸ | by رحمان موسویان | php

تیر
۱۳

امروز نیاز به این داشتم که چک کنه یک عدد ۱۷ رقمی عدد هست یه نه(مثلا” رشته نباشه). قبلا” به این صورت استفاده میکردم:


echo (double)$_GET['number'];

اما خب این برای اعداد کمتر از ۱۰ رقمی هست.

برای حل این مشکل از تابع bcadd استفاده کردم که جمع دوعدد خیلی بزرگ رو میده، به این صورت:


echo bcadd($_GET['number'] , 0 );

اگه در برنامه ای نیاز به محاسبات اعداد بزرگ داشتید میتونید به این جا مراجعه کنید و توضیح php رو راجع به آن بخونید.

بدون نظر »

Browsers CSS Hack

۳۱ اردیبهشت ۱۳۸۸ | by رحمان موسویان | CSS, Damn ie, Mozilla FireFox

اردیبهشت
۳۱

بوسیله این css میشه یک استایل متفاوت برای هریک از اجزای صفحه برای مرورگرهای متفاوت نوشت.
خیلی بکار میاد.


/***** Selector Hacks ******/
/* IE 6 and below */
* html #uno { color: red }
/* IE 7 and below */
*:first-child+html #dos { color: red }
/* IE 7 and modern browsers */
html > body #tres { color: red }
/* Modern browsers (not IE 7) */
html>/**/body #cuatro { color: red }
/* Opera 9.27 and below */
html:first-child #cinco { color: red }
/* Safari */
html[xmlns*=""] body:last-child #seis { color: red }
/*safari 3+, chrome 1+, opera9+, ff 3.5+ */
body:nth-of-type(1) #siete { color: red }
/* safari 3+, chrome 1+, opera9+, ff 3.5+ */
body:first-of-type #ocho { color: red }
/* saf3, chrome1+ */
@media screen and (-webkit-min-device-pixel-ratio:0) {
#diez { background: #FFDECE; border: 2px solid #ff0000 }
}
/***** Attribute Hacks ******/

/* ie6 and below */
#once { _color:blue }
/* ie7 and below */
#doce { *color: blue } /* or #color:blue */
/* 'Modern Browsers' includes IE8, whether you agree or not.. :) */

نظرات »

حذف کامنت ها

۱۲ فروردین ۱۳۸۸ | by رحمان موسویان | javascript

فروردین
۱۲

برای حذف کامنت های جاوا اسکریپ این رو استفاده کردم. اگه میخواین بدونین واسه چی، واسه کم شدن حجم فایلjs

درواقع این رو در بخش Regular Expression در قسمت Replace برنامه Notepad++ استفاده کردم

دقت داشته باشین که g در آخر پارامتر اول تمام اتفاقات از این regExp رو برمیگردونه.
اگه نباشه فقط اولین عبارتی که پیدا میشه با پارامتر دوم replace شده و تموم!


str.replace(/()|(\/\*(.*)\*\/)|(\/\/(.*))/g,'');

نظرات »

Java & Ms access

۱۲ فروردین ۱۳۸۸ | by رحمان موسویان | Java

فروردین
۱۲

احیانا” اگه سر مورد زیر بیچاره شدین (مثل خود من) این میتونه راه حل باشه:

وقتی که بخواین با جاوا به Ms Access کانکت بشین و فارسی کار کنین!

در واقع مشکل فارسی جاوا و اکسس بصورت زیر قابل حل هست:


Properties prop = new Properties();
prop.put("charSet", "UTF8");
connection = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=src\\database.mdb", prop);

به همین سادگی

نظرات »