یوشا

دست نوشته ها و تجربیات شخصی

یوشا

دست نوشته ها و تجربیات شخصی

شهید دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم آنکس که تخصص ندارد و کاری را می پذیرد بی تقواست!

طبقه بندی موضوعی
تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران

۲۸ مطلب با موضوع «نرم افزار :: برنامه نویسی :: PHP» ثبت شده است

دلایل مختلفی ممکنه وجود داشته باشه که یک تیم توسعه‌دهنده تصمیم بگیره قابلیت API رو از یک پروژه‌ی Laravel حذف کنه... مثلا:

 

- نیاز نداشتن به API و تمرکز روی توسعه‌ی وب‌سایت

- کاهش پیچیدگی و تمیزکاری

- کاهش دردسرهای امنیتی

- بهبود مصرف منابع سرور

 

خلاصه اگه واقعاً API به کار نیاد، حذفش باعث سبک‌تر شدن پروژه، ساده‌تر شدن نگهداری و تمرکز بیشتر روی همون کار اصلی می‌شه.

برای حذف اصولی API و موارد مرتبط از یک پروژه Laravel، باید مراحل زیر رو انجام داد:

 

1- حذف فایل API از Route ها

مسیرهای API معمولاً در فایل routes/api.php تعریف می‌شن. این فایل رو باید پاک کنید.

routes/api.php

 

2- حذف Loader فایل api.php در RouteServiceProvider

مسیر:

app/Providers/RouteServiceProvider.php

کدها:

public function boot()
{
    $this->routes(function () {
        // این قسمت رو حذف یا کامنت کنید
        // Route::middleware('api')
        //     ->prefix('api')
        //     ->group(base_path('routes/api.php'));

        Route::middleware('web')
            ->group(base_path('routes/web.php'));
    });
}

 

3- حذف middleware های مربوط به API در Kernel.php

مسیر:

app/Http/Kernel.php

کدها:

protected $middlewareGroups = [
    'web' => [
        // Middlewareهای وب
    ],

    // این قسمت رو حذف یا کامنت کنید
    // 'api' => [
    //     \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    //     'throttle:api',
    //     \Illuminate\Routing\Middleware\SubstituteBindings::class,
    // ],
];

 

4- درصورت وجود: پاک کردن کنترلرها و منابع API

مسیر:

app/Http/Controllers/API
و
app/Http/Resources

 

5- پاک کردن cache ها

دستور زیر رو بزنید تا cache ها پاکسازی بشن:

php artisan optimize:clear

 

6- حذف دستورات پکیج Sanctum

مسیر:

app\Models\User.php

کدها:

   //use Laravel\Sanctum\HasApiTokens;

   final class User extends BaseUser
   {
      //use HasApiTokens;

اگر از این Trait در مسیرهای دیگه هم استفاده شده، حذفش کنید.

 

7- کانفیگ Path در CORS

مسیر:

config\cors.php

کدها:

'paths' => ['api/*', 'sanctum/csrf-cookie'], // -> 'paths' => [],

 

8- حذف فایل کانفیگ پکیج Sanctum و Passport

مسیر:

config\sanctum.php
و
config\passport.php

 

9- حذف کدهای Sanctum و Passport از داخل فایلهای tests

مسیر:

tests/unit/
و
tests/feature/

 

10- حذف کدها و جدول personal_access_tokens

جدول personal_access_tokens رو از دیتابیس حذف کنید. همچنین:

مسیر:

routes\console.php

کدها:

//DB::table('personal_access_tokens')->truncate();

 

11- نهایتاً حذف پکیج laravel/sanctum و laravel/passport

دستور:

composer remove laravel/sanctum
composer remove laravel/passport

و مجدد دستور زیر رو بزنید تا cache ها پاکسازی بشن:

php artisan optimize:clear
۰ نظر ۱۴۰۳/۰۹/۱۸
یوشا آل ایوب

یکی از مهمترین ویژگی‌های جدید در PHP 8.0، کامپایلر JIT است. JIT می‌تواند با کامپایل کردن و ذخیره‌ کردن کامل یا بخش‌هایی از اسکریپت PHP، به کد ماشین CPU، عملکرد را بسیار بهبود بخشد و به طور مستقیم کد ماشین را اجرا کند، بطوریکه Zend VM و سربار ناشی از عملیات و فرایندهای آنرا دور می‌زند و نادیده می‌گیرد.

JIT ترکیبی از مفسران traditional و کامپایلرهای AoT است. این مدل ترکیبی/Hybrid، مزایا و معایب هر دو مفسر و کامپایلر را به ارمغان می‌آورد.
پیاده‌سازی PHP JIT تنها با تلاش‌های شگفت‌انگیز Dmitry Stogov در چند سال اخیر، ارزش بحث، اجرا و آزمایشات را پیدا کرده است.

این مقاله در مورد benchmark ها، نحوه‌ی کار JIT، امکانات و گزینه‌های پیکربندی در php.ini می باشد.

دانلود مقاله PDF

۰ نظر ۱۴۰۳/۰۳/۱۷
یوشا آل ایوب
۰ نظر ۱۴۰۰/۰۱/۱۴
یوشا آل ایوب

 

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.

۰ نظر ۱۳۹۹/۱۰/۱۳
یوشا آل ایوب
  • هر قطعه کد تست باید کوتاه، قابل فهم و خوانا باشه.
  • کدهای تست باید قطعه قطعه و به واحدهای مستقل از هم تقسیم بشن.
  • کدهای تست باید مستقل از محیط اجرایی باشن و وابستگی به platform نداشته باشن.
  • بهتره شیوه اجرای کدهای تست بسادگی و توسط یک دستور انجام بشه.
  • امکان گزارش گیری Test code coverage باید فراهم باشه.
  • اجرای تست case ها از پایین ترین سطح(Unit) به بالاترین سطح(E2E) باید باشه.
  • تست case هارو توسط الگوی AAA بنویسید.
  • در کدهای تست باید از نقل/انتقال اطلاعات حجیم خودداری کرد تا پروسه تست بسرعت انجام بشه.
  • کدهای تست باید بروز باشن و با هر تغییر جدی روی کدهای اصلی باید تغییر کنند.
  • حجم کل کدهای تست تولید شده معمولاً باید برابر یا بیشتر از حجم کدهای اصلی باشه. (یعنی برای همه موارد تست نوشته شده باشه)
  • کدهای تست باید در همان روزی که کدهای اصلی پروژه نوشته میشن تولید بشن. (به روزهای آینده موکول نشه)
  • تست case ها باید کدها، متدها و امکانات پروژه رو به سخت ترین شکل به چالش بکشن.
  • از test double ها استفاده مجدد کنید.
  • تا حد امکان از تست کردن محتوای private کلاس ها و Private API ها پرهیز کنید. (بواسطه کدهای public تست blackbox انجام بدید یا CUT رو redesign کنید)
  • هنگام نوشتن تست case تا حد امکان از بکار بردن دستورات شرطی if/else/switch... پرهیز کنید.
  • بهتره کدهای تست به خارج از محدوده پروژه dependency نداشته باشن.
  • بهتره نام فایل تست به کلمه Test ختم بشه. مثل EmailTest, UtilityTest, DatabaseTest
  • بهتره نام توابع/متدهای داخل فایل تست با کلمه test شروع بشن. مثل test_if_email_is_valid یا testIsEmailValid
  • همیشه تست هارو هم برای سناریوی happy path و هم unhappy path بنویسید. (تست happy path تضمین می کنه که سیستم در شرایط عادی به درستی کار می کنه، اما unhappy path به کشف و رسیدگی به مسائل مربوط به مدیریت خطا، امنیت و انعطاف پذیری در مواجهه با سناریوهای غیرمنتظره کمک می کنه.)

 

نکته: وظیفه نوشتن کدهای تست برای 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- از استفاده بیش از حد کوکی و ذخیره اطلاعات حساس/نمایشی  در داخلشون خودداری کنید.

۰ نظر ۱۳۹۹/۰۴/۲۵
یوشا آل ایوب

 

Functionality test, Performance/Speed test, User experience test, Compatibility test, Security test

 

نکته: هر 5 نوع تست بالا رو میشه با 2 روش manual و automatic و در 5 سطح/لایه مختلف انجام داد:

Unit Test, Integration Test, Feature/Module Test. System Test, [User] Acceptance/E2E Test

۰ نظر ۱۳۹۹/۰۲/۱۵
یوشا آل ایوب

 

دقیقتر:

 

 

دقیقتر:

 

mvc چیست، ام وی سی چیست، ساختار mvc

منبع: https://blog.glyphobet.net/essay/153/

۰ نظر ۱۳۹۸/۱۲/۰۶
یوشا آل ایوب

مقالات مرتبط:

#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://securityheaders.com

https://urlvoid.com

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 درست کنید تا در مواقع لزوم بتونید فعالیت های اپلیکیشن رو مانیتور و خطازدایی کنید.

۱ نظر ۱۳۹۸/۰۷/۱۸
یوشا آل ایوب

 

برای بزرگنمایی کلیک کنید

PHP skills, back-end developer skills, مهارت های برنامه نویس PHP، roadmap, مهارت های برنامه نویس، programming skills

 

۳ نظر ۱۳۹۷/۰۹/۱۱
یوشا آل ایوب