<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حسین‌نویس</title>
        <link>https://virgool.io/feed/@hoseinevis</link>
        <description>الکی برنامه نویس شدیم ...</description>
        <language>fa</language>
        <pubDate>2026-06-10 14:06:58</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/23247/avatar/uuJjf8.jpg?height=120&amp;width=120</url>
            <title>حسین‌نویس</title>
            <link>https://virgool.io/@hoseinevis</link>
        </image>

                    <item>
                <title>همزمانی در PHP: راهکارها و ابزارهای نوین</title>
                <link>https://virgool.io/@hoseinevis/%D9%87%D9%85%D8%B2%D9%85%D8%A7%D9%86%DB%8C-%D8%AF%D8%B1-php-%D8%B1%D8%A7%D9%87%DA%A9%D8%A7%D8%B1%D9%87%D8%A7-%D9%88-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7%DB%8C-%D9%86%D9%88%DB%8C%D9%86-jox0bromixsy</link>
                <description>به عنوان کسی که به PHP علاقه‌مند است و نزدیک به ده سال با این زبان کار کرده، همیشه به زبان‌های دیگر که ابزارهای مناسبی برای همزمانی دارند، حسادت کرده‌ام. همزمانی یکی از جنبه‌های مهم در توسعه نرم‌افزارهای مدرن است که متاسفانه در PHP به خوبی پوشش داده نشده است. با این حال، در سال 2024، تغییرات مثبتی در این زمینه مشاهده می‌شود.PHP با همکاری‌های جدید و ابزارهای تازه‌ای که به جامعه توسعه‌دهندگان اضافه شده، به زبان پایدارتری تبدیل شده است. بسیاری از شرکت‌ها، از جمله استارتاپ‌ها و شرکت‌های بزرگ، از PHP برای توسعه محصولات خود استفاده می‌کنند. برای استارتاپ‌ها، فریمورک‌های PHP همچنان بهترین گزینه برای شکل‌دهی به محصول به شمار می‌آیند.ابزارهای جدید در دنیای PHPدو ابزار که به نظر من ارزش بالایی به جامعه PHP اضافه کرده‌اند، عبارتند از:Laravel Octane: این ابزار به طور خاص برای بهبود عملکرد فریمورک Laravel طراحی شده و با ارائه قابلیت‌های بهبود یافته برای پردازش همزمان، تجربه توسعه‌دهندگان را بهبود می‌بخشد.FrankenPHP: این پروژه نیز با هدف ارتقاء قابلیت‌های همزمانی در PHP معرفی شده و ابزارهای متعددی را برای توسعه‌دهندگان فراهم می‌کند.همزمانی چیست؟در علوم کامپیوتر، همزمانی به توانایی اجرای بخش‌های مختلف یک برنامه به صورت همزمان یا بدون ترتیب خاص گفته می‌شود، بدون اینکه بر نتیجه نهایی تأثیر بگذارد. تصور کنید که با یک اسکریپت CLI کار می‌کنید که وظایف زمان‌بر را انجام می‌دهد و می‌توان این وظایف را به بخش‌های کوچکتر تقسیم کرد. این وظایف می‌تواند شامل درخواست‌های REST متعدد، ذخیره و بازیابی داده‌ها از پایگاه داده، یا تغییرات در سیستم فایل باشد.به طور پیش‌فرض، PHP به صورت خط به خط اجرا می‌شود و تنها یک کار را در یک زمان انجام می‌دهد. ما نمی‌توانیم به صورت پیش‌فرض رشته‌های فرعی را به رشته‌های اصلی پیوست کنیم. با این حال، می‌توانیم از یک پکیج کوچک به نام spatie/fork استفاده کنیم تا به این قابلیت دست یابیم. این پکیج به ماژول‌های pcntl و sockets نیاز دارد، بنابراین مطمئن شوید که این ماژول‌ها در پروژه شما وجود دارند.پیاده‌سازی همزمانی در PHPفرض کنید که یک تابع زمان‌بر دارید که به نتیجه آن وابسته هستید و این تابع از 0 تا 100 میلیون شمارش می‌کند:به طور معمول، شما این کد را به صورت زیر می‌نویسید:این کد زمان زیادی می‌گیرد تا اجرا شود. حال بیایید زمان اجرای آن را بررسی کنیم:در این حالت، اجرای این کد حدود ۴ ثانیه طول می‌کشد، که می‌تواند بر اساس قدرت محاسباتی و حافظه سیستم متفاوت باشد.استفاده از Fork برای بهبود عملکرداکنون با استفاده از Spatie\Fork\Fork می‌توانیم کد را به صورت همزمان اجرا کنیم:در این مثال، از \Spatie\Fork\Fork استفاده کردیم تا سه وظیفه مختلف ایجاد کرده و نتیجه هر یک را جمع‌آوری کنیم. نتیجه نشان می‌دهد که زمان اجرا از ۴.۳ ثانیه به ۱.۵ ثانیه کاهش یافته است، که نشان‌دهنده بهبود قابل توجهی در عملکرد است.کجا باید برویم؟توصیه می‌کنم صفحه GitHub پکیج spatie/fork را بررسی کنید. این صفحه دارای دستورالعمل‌های کاملی برای توسعه‌دهندگان است و یکی از بهترین پکیج‌های متن‌باز ساخته شده توسط Spatie محسوب می‌شود. همچنین، منابع و ویدئوهای آموزشی بسیاری در اینترنت وجود دارد که می‌تواند به شما در درک بهتر مفهوم همزمانی کمک کند.این مقاله یک معرفی ساده به موضوع همزمانی در PHP بود. اگر به این مفهوم علاقه‌مند هستید، مطالعه بیشتر درباره این موضوع را توصیه می‌کنم.روز خوبی داشته باشید!</description>
                <category>حسین‌نویس</category>
                <author>حسین‌نویس</author>
                <pubDate>Tue, 13 Aug 2024 00:09:36 +0330</pubDate>
            </item>
                    <item>
                <title>ویژگی‌های جدید PHP 8.4</title>
                <link>https://virgool.io/@hoseinevis/%D9%88%DB%8C%DA%98%DA%AF%DB%8C-%D9%87%D8%A7%DB%8C-%D8%AC%D8%AF%DB%8C%D8%AF-php-84-scwzp3gtyw7k</link>
                <description>PHP 8.4نسخه جدید PHP 8.4 با معرفی ویژگی‌های تازه و بهبودهای متعدد، تجربه توسعه‌دهندگان را بهبود می‌بخشد. این نسخه با تمرکز بر ارتقاء کارایی، امنیت و سادگی، قابلیت‌های جدیدی برای برنامه‌نویسان ارائه می‌دهد. در اینجا به بررسی مهم‌ترین تغییرات و ویژگی‌های جدید این نسخه می‌پردازیم:توابع جدیدPHP 8.4 مجموعه‌ای از توابع جدید را معرفی کرده است که امکانات کار با آرایه‌ها و رشته‌ها را گسترش می‌دهد. این توابع به توسعه‌دهندگان اجازه می‌دهد تا با سادگی بیشتری عملیات پیچیده‌ای را انجام دهند:array_find و array_find_key: این توابع برای جستجوی مقادیر و کلیدها در آرایه‌ها طراحی شده‌اند. به‌کمک آن‌ها می‌توانید به سرعت و به‌صورت بهینه عناصر موردنظر را در آرایه‌ها پیدا کنید.array_any و array_all: این توابع بررسی می‌کنند که آیا هر یا همه عناصر یک آرایه شرط خاصی را برآورده می‌کنند یا خیر. این قابلیت برای فیلتر کردن و ارزیابی سریع آرایه‌ها بسیار مفید است.grapheme_str_split: این تابع برای تقسیم رشته‌ها بر اساس کاراکترهای گرافیمی طراحی شده است. این امر به ویژه در کار با زبان‌هایی که کاراکترهای پیچیده‌ای دارند، مانند چینی یا ژاپنی، کاربرد دارد.mb_ucfirst و mb_lcfirst: این توابع اولین کاراکتر رشته را به حروف بزرگ یا کوچک تبدیل می‌کنند. این ویژگی برای بهبود پردازش رشته‌ها و نمایش صحیح آن‌ها در رابط‌های کاربری مفید است.بهبودهای تاریخ و زماننسخه PHP 8.4 قابلیت‌های جدیدی برای مدیریت دقیق‌تر تاریخ و زمان ارائه می‌دهد:DateTime(Immutable)::get/setMicrosecond: این متدها به شما امکان می‌دهند تا مقدار میکروثانیه را در اشیاء DateTime تنظیم یا دریافت کنید. این ویژگی به ویژه برای کاربردهای نیازمند دقت زمانی بالا مانند تحلیل داده‌ها و ثبت وقایع مفید است.createFromTimestamp: متدی جدید برای ایجاد اشیاء DateTime از تایم‌استمپ‌ها است. این قابلیت به توسعه‌دهندگان امکان می‌دهد تا به سادگی و سرعت بیشتری با زمان کار کنند.شبکه و رمزنگارینسخه جدید PHP با بهبودهایی در بخش شبکه و رمزنگاری همراه است که امنیت و عملکرد را افزایش می‌دهد:پشتیبانی از AEGIS-128L و AEGIS256: این الگوریتم‌های رمزنگاری در کتابخانه Sodium برای افزایش امنیت و کارایی رمزنگاری اضافه شده‌اند. آن‌ها امکان رمزنگاری ایمن‌تر و سریع‌تر را فراهم می‌کنند.به‌روزرسانی curl_version(): این به‌روزرسانی اطلاعات دقیق‌تری از نسخه cURL ارائه می‌دهد و به توسعه‌دهندگان امکان می‌دهد تا به‌روزرسانی‌ها و سازگاری‌های مربوط به شبکه را بهتر مدیریت کنند.بهبودهای عبارت باقاعده و گرد کردنPHP 8.4 بهبودهایی در زمینه پردازش عبارات باقاعده و گرد کردن اعداد ارائه داده است:ارتقا PCRE2: نسخه جدید PCRE2 با بهبود عملکرد و امکانات جدید در عبارات باقاعده همراه است. این امر به توسعه‌دهندگان اجازه می‌دهد تا با کارایی بیشتری از عبارات باقاعده استفاده کنند.حالت‌های جدید گرد کردن در round(): این نسخه امکانات بیشتری برای کنترل دقیق گرد کردن اعداد فراهم کرده است. با استفاده از این ویژگی‌ها می‌توان مقادیر عددی را با دقت بیشتری مدیریت کرد.حذف و کاهش برخی ویژگی‌هادر PHP 8.4 برخی از ویژگی‌ها کاهش یافته یا به PECL منتقل شده‌اند تا مدیریت و توسعه مستقل‌تری داشته باشند:انتقال برخی از اکستنشن‌ها به PECL: این انتقال به بهبود مدیریت و توسعه مستقل این اکستنشن‌ها کمک می‌کند.توقف پشتیبانی از پارامترهای ضمنی nullable: این تغییر برای جلوگیری از خطاهای ناشی از پارامترهای غیرمنتظره انجام شده است و به بهبود استحکام کد کمک می‌کند.این تغییرات و ویژگی‌های جدید نشان‌دهنده تعهد PHP به بهبود عملکرد و امنیت است. با بهره‌گیری از این امکانات، توسعه‌دهندگان می‌توانند به بهینه‌سازی کدهای خود و افزایش بهره‌وری دست یابند. برای جزئیات بیشتر و به‌روزرسانی‌ها، می‌توانید به PHP Watch مراجعه کنید</description>
                <category>حسین‌نویس</category>
                <author>حسین‌نویس</author>
                <pubDate>Tue, 13 Aug 2024 00:01:47 +0330</pubDate>
            </item>
                    <item>
                <title>نصب اپلیکیشن PHP بر روی Docker</title>
                <link>https://virgool.io/@hoseinevis/%D9%86%D8%B5%D8%A8-php-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-docker-qhtdtfrpt72d</link>
                <description>سلامامروز رو درگیر راه اندازی یک اپلیکیشن PHP بر روی داکر بودم .در این حالت ما چند نیاز مهم داشتیم : ماژول mod_rewrite رو بر روی apache فعال باشد کتابخانه GD بر روی PHP فعال شودفایل dump اولیه دیتابیس که وظیفه ساخت دیتابیس خالی‌ما هست بعد از راه اندازی کانتینر به صورت خودکار import شود ساختار فایل ها\dumpفایل اولیه دیتابیس را در داخل این فولدر قرار دهید . توجه کنید فایل هم نام با دیتابیس باشد\phpاین فایل وظیفه نصب apache و کانفیک را داره می باشد\sourceکد ها php خود را درون این فایل قرار دهیدdocker-composeversion: &amp;quot2&amp;quotservices:    api:        build:          context: ./php        ports:             - &amp;quot80:80&amp;quot        restart: always        volumes:            - ./source:/var/www/html/        links:            - mariadb        networks:            - default    mariadb:        image: mariadb        restart: always        ports:             - &amp;quot3306:3306&amp;quot        environment:            MYSQL_ROOT_PASSWORD: 123456            MYSQL_DATABASE: myDB            MYSQL_USER: webuser            MYSQL_PASSWORD: 123456        volumes:            - ./dump:/docker-entrypoint-initdb.d            - phpInDocker:/var/lib/mysql        networks:            - default    phpmyadmin:        image: phpmyadmin/phpmyadmin        restart: always        links:             - mariadb:db        ports:            - 8080:80        environment:            MYSQL_USER: webuser            MYSQL_PASSWORD: 123456            MYSQL_ROOT_PASSWORD: 123456volumes:    phpInDocker:اجراپس از اعمال تغییرات می‌توانید با دستور زیر کانتینر ها را تولید کنید$ docker-compose up -dشما میتونید تمام اطلاعات رو از این گیت‌هاب دریافت کنید</description>
                <category>حسین‌نویس</category>
                <author>حسین‌نویس</author>
                <pubDate>Fri, 19 Feb 2021 23:17:00 +0330</pubDate>
            </item>
                    <item>
                <title>بهینه سازی مدیریت حلقه ها در PHP</title>
                <link>https://virgool.io/@hoseinevis/%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AD%D9%84%D9%82%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-php-whgystyxpkko</link>
                <description>یکی از مواردی که باعث پیچیدگی زمانی در دسترسی به آرایه ها توسط حلقه ی FOR می شود استفاده کد به صورت زیر است.خروجی کد بالا :Total Execution Time: 1.27840709686 Mins TotalExecutionTime:1.27840709686Mins برای این روش بهتر است از روش زیر استفاده کنید . در روش زیر تابع Count یکبار اجرا شده و مقدار خروجی اش درون متغییر $Count ریخته می شود . با این روش فقط یک بار این تابع اجرا می شودخروجی کد بالا :Total Execution Time:0.300981044769 Minsهمانطور که میبینید حدود 0.9 ثانیه کد اول کندتر اجرا می شود !</description>
                <category>حسین‌نویس</category>
                <author>حسین‌نویس</author>
                <pubDate>Mon, 03 Dec 2018 19:35:09 +0330</pubDate>
            </item>
            </channel>
</rss>