1- برای بدست اوردن میزان حافظه مصرف شده باید از دستور memory_get_usage(FALSE)
استفاده کنید و برای میزان حافظه رزرو شده باید از دستور memory_get_usage(TRUE)
استفاده کنید.
اما این نکته در مستندات سایت PHP.net برعکس توضیح داده شده:
int memory_get_usage ([ bool $real_usage = FALSE ] )
Returns the amount of memory, in bytes, that's currently being allocated to your PHP script.
2- زمانی از دستور strcmp
استفاده کنید که قراره مقدار رشته ها شمارش(کمتر/بیشتر) بشن، درغیراینصورت استفاده از اپراتور ===
برای برابر بودن/نبودن رشته ها بهترین گزینست.
3- آیا میدونید به 4 روش مختلف میتونید تصاویر رو در مرورگر نمایش/output بدید؟
header('Content-Type: image/jpg'); $image = imagecreatefromjpeg('yourfilename.jpg'); header('Content-Length: ' . filesize('yourfilename.jpg')); imagejpeg($image); imagedestroy($image);
و
header('Content-Type: image/jpg'); header('Content-Length: ' . filesize('yourfilename.jpg')); readfile('yourfilename.jpg');
و
header('Content-Type: image/jpg'); header('Content-Length: ' . filesize('yourfilename.jpg')); echo file_get_contents('yourfilename.jpg');
و
header('Content-Type: image/jpg'); header('Content-Length: ' . filesize('yourfilename.jpg')); header('X-Sendfile: ' . 'yourfilename.jpg'); exit;
4- اگر از PHP CLI در محیط text UI سیستم عامل استفاده می کنید و مشکلات output و نمایشی دارید، بهتره از دستور passthru
استفاده کنید.
5- نکته جزیی: فراموش نکنید که تابع json_decode
فقط اعضای public
شی موردنظر رو تبدیل میکنه، و نه private
/ protected
.
نکته: وظیفه نوشتن کدهای تست برای Unit Testing بعهده فرد برنامه نویس هستش نه فرد Tester. زیرا:
- بدلیل حفظ مالکیت کدها/پروژه، Tester نباید به سورس پروژه دسترسی داشته باشه.
- بدلیل مسایل امنیتی و کاهش تهدیدها، Tester نباید به داخل کدها و مکانیزم سیستم دسترسی داشته باشه.
- همچنین Tester قادر نیست به همه ابزارها، سبکها و زبانهای مختلفی که در پروژه استفاده شده مسلط بشه و test case طراحی کنه.
- تنها برنامه نویس هستش به کدهایی که پیاده سازی کرده مسلطه و test case رو در کمترین زمان با بالاترین کیفیت تولید میکنه.
مقالات مرتبط:
نکاتی برای افزایش امنیت وبسایت
1- حتاالمکان از کتابخانه های template engine برای کدنویسی لایه View/UI وب اپلیکیشن استفاده کنید و نه کدنویسی inline/mixed.
2- برای کاهش مصرف پهنای باند و افزایش سرعت سایت، همیشه فایلهای CSS, JavaScript, HTML رو minify و lint کنید:
CSS:
https://github.com/purifycss/purifycss
https://cssnano.co/guides/getting-started
https://github.com/ben-eb/cssnano-cli
https://github.com/css/csso-cli
https://github.com/uncss/uncss
JS:
https://github.com/nolanlawson/optimize-js
3- بطور منظم و ماهیانه پهنای باند وبسایت/سرور رو چک کنید.
4- یک سیستم اسکنر پیاده کنید که نوع دسترسی و زمان تغییر فایلها و دایرکتوری های کل سایت رو اسکن و به شما گزارش کنه.
5- از استفاده بیش از حد کوکی و ذخیره اطلاعات حساس/نمایشی در داخلشون خودداری کنید.
مقالات مرتبط:
#2 - نکاتی برای افزایش امنیت وبسایت
1- مکانیزم و شیوه کار پروتوکل HTTP رو کامل فرا بگیرید.
2- همیشه کتابخانه ها و فریم ورکهای استفاده شده در وب اپلیکیشن رو بروز نگه دارید.
3- جهت جلوگیری از click-jacking مقدار هدر X-Frame-Options
رو DENY
قرار بدید:
Apache httpd.conf: Header always append X-Frame-Options DENY Apache .htaccess: Header append X-FRAME-OPTIONS "DENY" Nginx: add_header X-Frame-Options "DENY"; PHP: header('X-Frame-Options: DENY');
4- بصورت هفتگی یا ماهیانه کل سایت رو توسط نرم افزارها و سایتهای اسکنر امنیتی چک کنید:
https://observatory.mozilla.org
https://virustotal.com
https://immuniweb.com/websec
https://detectify.com
http://amn.bayan.ir
https://ssllabs.com/ssltest/index.html
http://isithacked.com
https://app.upguard.com/webscan
https://app.webinspector.com/online_scan
https://suip.biz/?act=sqlmap
https://pentest-tools.com/home
https://sitecheck.sucuri.net
https://quttera.com
https://siteguarding.com
https://transparencyreport.google.com/safe-browsing/search
5- داده های ورودی توسط کاربر را بدقت بررسی، برش و فیلترسازی کنید!
6- برای اپلیکیشن، قابلیت debug mode درست کنید تا در مواقع لزوم بتونید فعالیت های اپلیکیشن رو مانیتور و خطازدایی کنید.
1- جهت پشتیبانی از ارث بری چندگانه در PHP میتونید توسط trait
ها اون رو شبیه سازی کنید.
trait PHP { public function printPHP() { echo 'PHP '; } } trait Java { public function printJava() { echo 'Java '; } } trait PHPJava { use PHP, Java; } class ProgrammingLanguages { use PHPJava; }
2- اگر در حین کار با Composer یا PHPUnit با خطای module openssl is already installed on Unknown in line 0 مواجه شدید، کافیه اکستنشن openssl رو در PHP.ini غیرفعال کنید:
ویندوز ;extension=php_openssl.dll لینوکس ;extension=php_openssl.so
1- هنگام Multi-thread کردن کدهاتون فراموش نکنید برای دسترسی به اشیاء lazy-initialize(یا همون load on demand) وضعیت نهایی شی باید synchronize باشه تا با مشکل race condition مواجه نشید.
2- برای نرمال سازی ستونها و جلوگیری از افزونگی/redundancy داده باید از اصول زیر پیروی کنید:
- هیچ ستونی نباید بیشتر از یک نوع/type داده رو نگهداری کنه. (مثل int + char + float...)
- هیچ ستونی نباید داده های تکراری/مشابه به دیگر ستون ها رو در خودش نگهداری کنه.
- داده هارو در جداول مختلف نگهداری کنید و درصورت لزوم اونهارو توسط کلید خارجی/foreign key بهم متصل کنید.
3- جهت افزایش پرفورمنس، همیشه کلاس والد و اینترفیس رو در خطوط قبل از کلاس ارث بر تعریف کنید. در غیراینصورت موتور PHP برای پیدا و پردازش کردن کلاس والد مجبور به انجام عملیات های اضافی خواهد شد. (بر اساس OpCode تولید شده)
interface IData { } class MyClass implements IData { }
نکته: حتی اگر در فایلهای جداگانه تعریفشون می کنید این قائده باز هم باید رعایت بشه.
4- یادتون باشه که Dependency Injection نه تنها از طریق Constructor، بلکه از طریق Setter, Interface و Property هم قابل انجامه.
نکته: زمانی از نوع Constructor استفاده کنید که کل کلاس نیازمند اون dependency هستش یا شی dependency نباید در طول life time تغییر بکنه.