خواندن و نوشتن فایل‌های اکسل در لاراول

لاراول شیوه‌ی جدیدی از کدنویسی را در دنیای برنامه‌نویسی php ایجاد کرده است. در این شیوه شکل دستورات برنامه‌نویسی تا حد امکان به زبان انسان نزدیک شده است و به همین دلیل خواندن کدهایی که قبلا نوشته شده‌اند و توسعه‌ی آن‌ها نسبت به قبل آسان‌تر و سریع‌تر شده است.
خواندن و نوشتن فایل‌های اکسل از گذشته یکی از مشکلات قابل توجه در برنامه‌نویسی به ویژه در محیط‌هایی غیر از ویندوز به شمار می‌رفته است.
ایجاد و خواندن اکسل در لاراول و php
با گذشت زمان، این مشکل تا حد زیادی برطرف شده است. در زبان php کتابخانه‌ی  PHPExcel ابزاری بوده است که انجام این کار را بسیار در دسترس قرار داده است.

ادامه‌ی خواندن

ارسال شده در PHP, لاراول | برچسب‌شده , , | ۲ دیدگاه

افزونه‌های ضروری برای وردپرس

wordpress

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

ارسال شده در SEO, امنیت, برنامه‌نویسی, وردپرس | برچسب‌شده , | دیدگاه‌تان را بنویسید

انتقال فایل‌های تغییر یافته پروژه به سرور

در هنگام برنامه‌نویسی پروژه‌های تحت وب، در دفعات مکرر ممکن است بخواهیم آخرین فایل‌های تغییر یافته را به سرور منتقل کنیم.
شناسایی فایل‌هایی که تغییر کرده‌اند و آپلود تک به تک آن‌ها به سرور کاری دشوار و زمان‌بر است.
از طرف دیگر آپلود تمامی فایل‌ها هم ممکن است به دلیل حجم زیاد و تعداد زیاد، منطقی و شدنی نباشد.
یکی از بهترین روش‌ها در هنگام انجام این کار، فشرده کردن فایل‌هایی است که در مدت زمان مشخصی تغییر کرده باشند و آپلود این فایل فشرده روی سرور.
برای شناسایی فایل‌هایی که امروز تغییر کرده‌اند و قرار دادن آن‌ها در یک فایل فشرده، می‌توان از نرم‌افزار Info-ZIP که نرم‌افزاری رایگان و چندسکویی است استفاده کرد.
برای این منظور ابتدا نرم‌افزار Zip را از این صفحه دانلود کنید
سپس یک Batch File ( با پسوند cmd یا bat ) در شاخه‌ی بالایی پروژه‌ی خود ایجاد کنید.
برای مثال اگر فایل‌های پروژه در مسیر C:\wamp\www\amib قرار دارند، فایل خود را در مسیر

c:\wamp\www\compress-amib.cmd

ایجاد کنید.
محتویات فایل Batch را مطابق کدهای زیر قرار دهید. فراموش نکنید که نام شاخه‌ها را می‌بایست مطابق نیاز تغییر دهید.

@echo off
del amib\amib.zip > nul
cd amib
set mydate=%date:~4,2%%date:~7,2%%date:~10,4%
c:\zip.exe -r amib.zip -9 -t=%mydate% *.*

اکنون می‌توانید فایل Battch را اجرا کنید و پس از ایجاد شدن فایل zip آن را به سرور منتقل و استخراج کنید.
این فایل به طور پیش‌فرظ تاریخ امروز را مقابل دستور zip قرار می‌دهد. بنابراین آخرین فایل‌هایی که طی امروز تغییر کرده‌اند را شناسایی و فشرده می‌کند. چنانچه می‌خواهید فایل‌های تغییر یافته در روزهای قبل نیز به فایل فشرده افزوده شوند، می‌بایست دستورات را مطابق نیاز تغییر دهید.

ارسال شده در برنامه‌نویسی, نرم‌افزار | برچسب‌شده , , , | دیدگاه‌تان را بنویسید

خطاهای تایپی در برنامه نویسی و روش کم کردن آن

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

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

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

استفاده از ویرایشگر( Editor ) و محیط توسعه( IDE ) قدرتمند

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

تایپ ده انگشتی

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

تجربه

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

راه حل‌های فنی

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

ارسال شده در برنامه‌نویسی | برچسب‌شده , | ۲ دیدگاه

عبارت‌های شرطی یودا( Yoda )

یودا در اصطلاح، شیوه‌ای کد نویسی برای تعریف عبارت‌های شرطی است. در این روش، مقدار مقایسه پیش از علامت «==» و متغیر پس از آن می‌آید:

<?php
	//NORMAL
	if( $hello == false ) {
	    // ...
	}
 
	// YODA CONDITIONS
	if( false == $hello ) {
	    // ...
	}
?>

چرا این کار را انجام می‌دهیم؟

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

معایب

برخی از برنامه‌نویسان معتقدند این روش، خوانایی کد را پایین می‌آورد.

یکی از قوانین کدنویسی وردپرس، استفاده از عبارت‌های شرطی یودا است

ارسال شده در PHP, برنامه‌نویسی, وردپرس | برچسب‌شده , | یک دیدگاه

Node.js چیست؟

nodejs

Node.js یک محیط یا Platform برنامه‌نویسی تحت سرور است که بر پایه‌ی موتور جاواسکریپت V8 گوگل کروم توسعه پیدا کرده است.
Node.js می‌تواند برای ایجاد وب‌سرورهای ساده تا پیشرفته مورد استفاده قرار بگیرد. برای مثال ممکن است برای راه‌اندازی یک وبسایت همه منظوره که محتواهای متنی و چندرسانه‌ای را در اختیار مشتریان قرار می‌دهد از این ابزار استفاده شود.
ویژگی قابل توجهی که Node.js را از سایر محیط‌های برنامه‌نویسی متمایز می‌کند رویدادگرا( Event-driven ) بودن آن است. برنامه‌نویسی رویدادگرا به شیوه‌ای از برنامه‌نویسی گفته می‌شود که اجرا کدهای برنامه وابسته به رخداد رویدادهای خاص است. برای مثال در هنگام خواندن محتویات یک فایل، در برنامه‌نویسی سنتی، برنامه در هنگام خوانده شدن محتویات فایل از روی رسانه، متوقف می‌شود و پیشروی نمی‌کند. در معماری رویدادگرا، برنامه به پیشروی خود ادامه می‌دهد و هنگامی که محتویات از فایل خوانده شدند، تابع دلخواهی از برنامه توسط Node.js فراخوانی می‌شود.
ادامه‌ی خواندن

ارسال شده در برنامه‌نویسی, جاوااسکریپت | برچسب‌شده , | ۲ دیدگاه

همه چیز در مورد فشرده‌سازی

WinRAR 5
هرچند ظرفیت ذخیره‌سازی دیسک سخت و درایو‌های نوری و دیسک‌های فلش افزایش چشم‌گیری داشته و سرعت انتقال داده‌ها نیز نسبت به گذشته رشد قابل توجهی را تجربه می‌کند، با این حال به دلایل مختلف ممکن است بخواهیم حجم فایل‌ها را تا حد ممکن کم کنیم.
ادامه‌ی خواندن

ارسال شده در عمومی | برچسب‌شده , , , | یک دیدگاه

تشخیص قدیمی بودن نگارش IE و تعریف کلاس برای body

internet explorer turtle
پشتیبانی از مرورگرهای مختلف از مهم‌ترین چالش‌های پیش‌روی توسعه دهندگان وب است.
طراحی سایت به گونه‌ای که روی تمام مرورگرها و تمامی نگارش‌های آن‌ها سایت به درستی نمایش داده شود، کاری بسیار دشوار و گاهی خارج از توان است.
یکی از راه‌حل‌های موجود، نمایش پیام‌های هشدار مناسب برای کاربرانی است که از مرورگرهای قدیمی استفاده می‌کنند.
در ادامه قطعه کدی را مشاهده می‌کنید که نگارش مرورگر کاربر را دریافت می‌کند و چنانچه مرورگر هدف Internet Explorer قدیمی‌تر از نگارش ۱۰ باشد، یک کلاس css به عنصر body پیوست می‌کند.
با بررسی وجود کلاس «old-ie» در کدهای شیوه‌نامه css می‌توان دو عمل مخفی کردن و نمایش دادن عنصرهای خاص را به سادگی به انجام رسانید.
این قطعه کد می‌بایست در انتهای فایل html و پیش از پایان عنصر body جاگذاری شود.
برای بررسی نگارش‌های دیگر IE و مرورگرهای دیگر، تغییراتی جزئی در این کد مورد نیاز است.

<script>
	function getIEVersion(){
		var agent = navigator.userAgent;
		var reg = /MSIE\s?(\d+)(?:\.(\d+))?/i;
		var matches = agent.match(reg);
		if ( matches != null ) {
			return { major: matches[ 1 ], minor: matches[ 2 ] };
		}
		return { major: "-1", minor: "-1" };
	}
 
	var ieVer = getIEVersion();
 
	if( ieVer.major != -1 && ieVer.major < 10 ) {
		document.body.className += ' old-ie';
	}
</script>
ارسال شده در CSS, HTML, برنامه‌نویسی, جاوااسکریپت | برچسب‌شده | دیدگاه‌تان را بنویسید

استان‌ها و شهرهای ایران

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

به روزرسانی ۹ اسفند ۹۴
فهرست جدیدی از سایت مرکز آمار ایران استخراج شد و جایگزین فهرست قبلی شد که ظاهرا اشکال‌هایی در آن وجود داشت.
فهرست شهر و استان ها مربوط به سال ۱۳۹۳ است. در صورتی که فهرست جدیدتری در این سایت قرار بگیرد، در اولین فرصت به روزرسانی خواهد شد.

فهرست شهر‌ها و استان‌های ایران – اینجا کلیک کنید

ارسال شده در برنامه‌نویسی, جاوااسکریپت, عمومی, پایگاه داده | برچسب‌شده , , | ۸ دیدگاه

یک سایت مورد حمله از روش SQL Injection

قرار بر این شد که سایتی را که قبلا با ابزارهای مایکروسافتی توسعه پیدا کرده بود و مورد حمله‌ی SQL Injection بود، بازطراحی و بازنویسی کنیم. نخستین مشکل این بود که سایت از نظر اندازه جزء سایت‌های متوسط به شمار می‌رود و بازطراحی آن به زمان قابل توجهی نیازمند بود. بنابراین اولویت نخست این بود که سایت فعلی به شکلی قابل قبول برگردد و جلوی حملات آتی هم گرفته شود تا مقداری فرصت برای کار جدید فراهم شود.
در این مسیر با مشکلات متعددی مواجه شدیم که پیدا کردن و رفع کردن آن حاوی تجربیات خوبی بود.

مشکل اول: عدم دسترسی به توسعه‌دهندگان اصلی و کد بودن سورس سایت

به دلیل اینکه سورس سایت کدشده بود، امکان پیدا کردن و مسدود کردن اشکال موجود تقریبا ناممکن بود. بنابراین تلاش شد، با روش‌های مختلف امکان دسترسی به صفحات حاوی فرم مسدود شود که آن هم بی‌نتیجه بود.
نخستین تجربه: هنگامی که سایتی جدید سفارش می‌دهید، در اختیار داشتن سورس سایت، ممکن است در آینده موضوعی حیاتی به شمار برود.

مشکل دوم: دسترسی به بانک اطلاعاتی

شرکتی که خدمات میزبانی سایت را بر عهده داشت، سیستم فنی و پاسخگویی چندان شناخته شده‌ای را در اختیار قرار نمی‌داد. پیدا کردن مسیر ارتباطی برای اتصال به پایگاه داده SQL Server حدود ۲ روز زمان را از بین برد.
تجربه‌ی دوم: انتخاب صحیح ابزارهای توسعه، سیستم میزبانی وب و نگهداری اطلاعات مهم در این موارد، موضوعی مهم است.

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

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

مشکل چهارم: مسدود کردن مسیرهای حمله

با توجه به کد بودن سورس‌های سایت، راهی جز حدس و گمان و راه حل‌های ابتکاری برای مسدود کردن آن‌ها موجود نبود. نخستین حدس این بود که فرم‌های سایت محل حمله هستند. تلاش‌ها در جهت تغییر فایل‌ها برای جلوگیری از کارکرد فرم‌ها و همزمان عمل کردن سایت بی نتیجه ماند. پس از مدتی بررسی، راه حل ابتکاری به ذهنم رسید. کاربری که اسکریپت سایت با آن به بانک اطلاعاتی متصل می‌شد را طوری تغییر دادم که امکان نوشتن اطلاعات در جداول بانک اطلاعاتی را نداشته باشد. خوشبختانه این روش مشکلی در عملکرد سایت به وجود نیاورد. پس از آن دوباره اطلاعات تخریب شده بازسازی شدند.
تجربه‌ی چهارم: زمانی که ظاهرا هیچ راهی وجود ندارد ممکن است یک راه وجود داشته باشد !

جمع بندی نهایی: چنانچه قصد پیاده‌سازی محصولی نرم‌افزاری را دارید، اگر در این زمینه تخصصی ندارید، حتما از یک مشاور خبره برای ارزیابی پیمانکاران و راه حل‌های آنان استفاده کنید. ممکن است خسارت‌های ناشی از عدم انجام این کار به مراتب بیش از هزینه‌های استفاده از یک مشاور باشد.

ارسال شده در امنیت, برنامه‌نویسی, عبارت‌های منظم, پایگاه داده | برچسب‌شده , , , | دیدگاه‌تان را بنویسید