PHP 非同步執行

最近與同事討論兩個有趣的參數與函式(ignore_user_abort、fastcgi_finish_request),先留個紀錄

ignore_user_abort (預設 off)

  • 用途:當使用者連線中斷時不影響操作

可透過以下方式操作

  • PHP 碼: ignore_user_abort(true);
  • Nginx 設定:fastcgi_ignore_client_abort off;
  • php.ini:ignore_user_abort=0;

但因階層關係,nginx > PHP,但理論上因為 nginx 已經轉發給 PHP 因此應只要在 PHP 做設定便可生效(尚未測試),猜測其預設 off 原因為一般狀況下使用者斷線不應該再為其服務(例:行動網路瀏覽電商商品頁面),但某些狀況下使用者可能希望有個完整執行(例:交易過程),因此若在有這類多種行為複雜的系統,不應該在 config 中建立起全域設定,而應該透過程式來控制特定需要這類行為的功能。

fastcgi_finish_request

  • 用途:PHP 運作在 FastCGI 下可透過其提早回應瀏覽器
  • PHP 碼:fastcgi_finish_request();
  • 與過去使用 flush 更新進度方式有點像,但本質不一樣

結論

在某些運作需要長時間的操作比如上傳圖片進行其他處理、產生大報表等,可同時使用以上兩個功能,讓其可以快速回應前端又可以完整執行,但正確做法建議還是採用任務排程(例:GearmanResque/Resque-Scheduler等),以避免遇到例外狀況的處理不一。

測試程式

function writeBigFile() { 
    $filepath = "/var/www/html/tmp/" . date("YmdHis") . "-" . rand(1000, 9999) . ".txt"; 
    echo $filepath . "<BR>" . PHP_EOL; $file = fopen($filepath, "a+");
        for ($i = 1; $i <= 10000000; $i++) { 
            fwrite($file, $i . PHP_EOL); 
        } 
}

ignore_user_abort

echo json_encode(array("status" => "ok"), true);
ignore_user_abort(true); // 加與不加 {"status": "ok"} 都會等到 writeBigFile() 執行完才顯示,但該函式可確保使用者中斷後持續把任務完成 
writeBigFile();

fastcgi_finish_request

echo json_encode(array("status" => "ok"), true);
fastcgi_finish_request(); // 該函式會讓 {"status": "ok"} 先回應使用者 
writeBigFile(); 

參考資料

691 comments

  1. [b]Пополение баланса Авито (Avito) за 50%[/b] | [b]Телеграмм @a1garant[/b]

    [b]Мое почтение, дорогие друзья![/b]

    Всегда рады предоставить Всем вам сервис по пополнению баланса на действующие активные аккаунты Avito (а также, абсолютно новые). Если Вам требуются определенные балансы – пишите, будем решать. Потратить можно на турбо продажи, любые платные услуги Авито (Avito).

    [b]Аккаунты не Брут. Живут долго.[/b]

    Процент пополнения в нашу сторону и стоимость готовых аккаунтов: [b]50% от баланса на аккаунте.[/b]
    Если требуется залив на ваш аккаунт, в этом случае требуются логин и пароль Вашего акка для доступа к форме оплаты, пополнения баланса.
    Для постоянных заказчиков гибкая система бонусов и скидок!

    [b]Гарантия: [/b]

    [b]И, конечно же ничто не укрепляет доверие, как – Постоплата!!![/b] Вперед денег не просим…

    Рады сотрудничеству!

    [b]Заливы на балансы Авито[/b]
    ________

    как пользоваться авито кошельком
    аккаунты авито с историей
    авито создать яндекс кошелек
    разблокировать авито аккаунт самому
    как положить деньги на авито без комиссии

  2. I’ve been exploring for a little for any high quality articles
    or weblog posts on this sort of space . Exploring in Yahoo I finally stumbled upon this website.
    Reading this info So i am happy to show that I’ve a very good uncanny feeling I
    came upon just what I needed. I such a lot unquestionably will
    make sure to do not put out of your mind this site and provides it a glance on a relentless basis.

  3. Unquestionably believe that which you said.

    Your favorite justification appeared to be on the net the
    easiest thing to be aware of. I say to you, I
    definitely get annoyed while people consider worries that they just don’t know about.
    You managed to hit the nail upon the top as well as defined out the whole thing without having side effect
    , people could take a signal. Will probably be back
    to get more. Thanks

  4. Hi, I do think your blog could possibly be having web browser compatibility problems.
    Whenever I take a look at your site in Safari, it looks fine however,
    if opening in IE, it’s got some overlapping issues.
    I merely wanted to give you a quick heads up!
    Other than that, fantastic website!

  5. Hi there! This is my first visit to your blog! We are a
    collection of volunteers and starting a new project in a community in the same niche.
    Your blog provided us valuable information to work on. You have
    done a marvellous job!

  6. I do not even know how I ended up here, but I thought this post was good.
    I don’t know who you are but certainly you are going to a famous blogger
    if you aren’t already 😉 Cheers!

  7. Магазин нормальных угги сразу из Австралии

    Еще не так давно бабушки на улицах косо смотрели на сапоги странного вида, что в чем-то смахивают на валенки, однако имели сотни разнообразных форм и расцветок.

    К счастью сегодня сапогами угги сложно кого-либо удивить: они уже давно завоевали публику и в столице продаются огромными партиями. Первоначально такие сапоги начали делать в Австралии, где процветает овцеводство и был широко доступен незаменимый материал для создания таких сапожек — натуральная овечья шерсть.

    Очень необычно что на международный рынок такие сапожки сумели попасть только в начале минувшего столетия, а в России о них начали узнавать ориентировочно в середине двухтысячных. Время хайпа и безумия уже давно ушло, но угги — это реально удобные сапожки, что спасут вас в любые морозы.

    В настоящее время угги можно заказать фактически на каждом углу: начиная от страшного вида палаток в переходах метро и заканчивая дорогущими бутиками в центре Москвы. Впрочем и там и там довольно трудно купить себе не поддельные сапожки из шерсти, потому что китайские заводы уже активно штампуют подделки и распродают их в десятки стран по смешной цене.

    Примером качественного магазина, который предлагает сапоги угги в России заслуженно считается ugg.msk.ru, который с 2014 года работает официальным поставщиком бренда UGG Australia на территории нашей большой страны.

    Все [url=http://ugg.msk.ru/shop/folder/uggi-korotkiye-klassicheskiye]белые короткие угги[/url] , которые доступны на этом ресурсе изготавливаются конкретно в Австралии из настоящего сырья и только потом транспортируются на территорию РФ грузом.

  8. Москва посуточная аренда квартир метро Новогиреево В квартире две спальни и большая комната, также есть комната и ванная комната. Сдается просторная и чистая однокомнатная помещение 40 м, кухня 10 м. Впоследствии качественногона длительный срок гражданам РФ без животных.
    [url=https://moscwaposutochno.blogspot.ru/]Москва посуточная аренда квартир метро Новогиреево[/url]

  9. Сайт-аутсайдер – выброшенные для ветер казна и время. Как привлечь клиентов, чем заинтересовать заказчиков и сиречь безвыездно это вовлечь в электронные формы знают сотрудники нашей компании, которые всегда рады новым интересным задачам, способны найти универсальный суждение с самыми экспрессивными заказчиками и постоянно рады помочь развитию деятельных фирм.

    раскрутка сайтов в Балашихе

  10. [url=http://vipedlowestdrugprices24-7.com/klonopin/how-do-i-buy-klonopin-online-overnight-delivery/]How do I buy Klonopin online overnight delivery?[/url], [url=http://vipedlowestdrugprices24-7.com/klonopin/will-i-be-able-to-get-klonopin-online-overnight-delivery/]Will I be able to get Klonopin online overnight delivery?[/url], [url=http://vipedlowestdrugprices24-7.com/klonopin/where-to-buy-klonopin-online/]Where to Buy Klonopin Online?[/url] Urishkephoollikalo

  11. [url=http://baumarktxxx.eu/]http://baumarktxxx.eu/[/url] LideRict [url=http://vipedlowestdrugprices24-7.com/klonopin/how-safe-is-klonopin-bought-online/]How safe is Klonopin bought online?[/url]

  12. [url=http://baumarktxxx.eu/]http://baumarktxxx.eu/[/url] LideRict [url=http://vipedlowestdrugprices24-7.com/klonopin/how-safe-is-klonopin-bought-online/]How safe is Klonopin bought online?[/url]

  13. Hey guys!!!
    designs and builds specialty lines of lead oxide production equipment, material handling systems, battery related process machinery, parts, and accessories for the battery, pigment, glass, and chemical industries. http://techbasys.com offers technical application and engineering services to help the customer acheive maximum benefit from their equipment and manufacturing processes.

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

*