search
HomeBackend DevelopmentPHP TutorialPHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial

PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background

In the past two days, I have developed a PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial tutorial program that calls SVN to synchronize update updates on multiple servers. In order to avoid being blocked during commit for a long time, I have to find a way to only request the trigger without waiting for the program update to complete and return the results. This is so time-consuming. It took too long, so I studied how to make PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial tutorial actively disconnect. After working on it all afternoon, I found a lot of problems. Fortunately, I finally solved them. The main reason was that Nginx was too messy. .


Without further ado, here’s the code:


PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial tutorial


<code class="hljs" java="">/**
 * 主动断开与客户端浏览器的连接
 * 如果是 Nginx 服务器需要输出大于等于 fastcgi_buffer_size 缓存的数据才能即时输出 header 断开连接, 若还是不行可尝试关闭 gzip
 * 如: fastcgi_buffer_size 64k; 即: 需要 64*1024 字符(可多不可少),
 * 可使用 str_repeat(&#39; &#39;, 65536); 另外 str_repeat(&#39;          &#39;, 6554); 这种方式其实生成速度更慢
 * @param null|string $str 当前输出的内容, 若无需输出则设置为空
 */
public function connectionClose($str = null) {
    $str = ob_get_contents() . $str;
    // 若实际输出内容长度小于该值将可能导致主动断开失败
    header(&#39;Content-Length: &#39;. strlen($str));
    Header::connectionClose();
    ob_start();
    echo $str;
    ob_flush();
    flush();
}</code>

Additional explanation:

There is generally no problem with apache. I used xampp on Windows to debug and found no problems at first. It turned out that it was Nginx on the server. It was dead or alive and crashed for an afternoon. It was later revealed that it was Nginx's fastcgi_buffer. question.

After testing N times under various conditions, there should be no bugs. . .


In addition, let’s talk about the problem of ignore_user_abort() function

When the browser is closed, determine whether the program will continue to execute in the background. (In the example below, you do not have to set it to never timeout limit 0 when testing, just set it for one or two minutes, otherwise It may take a long time to restart the HTTP service)


PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial tutorial


To put it simply, if you want the program to continue executing after the user's browser is closed, then you must add the following code:

<code bash="" class="hljs">ignore_user_abort(true);</code>

But it is slightly different depending on the situation of your subsequent program (mainly the while loop):

Generally in the program you can monitor the connection status for control:

<code bash="" class="hljs">$isAborted = connection_aborted();
$status = connection_status();
if (0 !== $status || $isAborted) {
    break;
}</code>

But there is a prerequisite for these two functions to work properly, that is, your program must have output content and be larger than the output cache of the current WebServer, so that it will work.

If you simply output a space echo ' '; it may have to loop thousands of times before it is judged, so in order to detect the status more immediately, you must output enough content each time it loops to trigger the status detection. .

So we often encounter a problem here: when the browser is disconnected, even if ignore_user_abort(true); is not used, the program will continue to execute because there is no output, and the infinite loop will continue to run. If it is set It's okay if it times out, otherwise you're really dead.


Post the test code below (the picture is posted mainly to prevent theft hehe~)


<code bash="" class="hljs">set_time_limit(0);

ignore_user_abort(true);

while (1) {
    echo str_repeat(&#39; &#39;, 65536);
    $isAborted = connection_aborted();
    $status = connection_status();
    file_put_contents(&#39;test.txt&#39;, &#39;time: &#39;. time() .&#39;; abroted:&#39;. $isAborted .&#39;; status: &#39;. $status);
    if (0 !== $status || $isAborted) {
        break;
    }
    sleep(2);
}</code>

You can try commenting out this sentence
// echo str_repeat(’ ‘, 65536);
Also
set_time_limit(0); It is best not to use 0

www.bkjia.comtruehttp: //www.bkjia.com/PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial tutorialjc/1036923.htmlTechArticlePHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background in the past two days to make PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP actively disconnects under Nginx Connection Close and ignore_user_abort run in the background_PHP tutorial tutorial call SVN to synchronize update Multiple server update procedures, in order to avoid com...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PHP Performance Tuning for High Traffic WebsitesPHP Performance Tuning for High Traffic WebsitesMay 14, 2025 am 12:13 AM

ThesecrettokeepingaPHP-poweredwebsiterunningsmoothlyunderheavyloadinvolvesseveralkeystrategies:1)ImplementopcodecachingwithOPcachetoreducescriptexecutiontime,2)UsedatabasequerycachingwithRedistolessendatabaseload,3)LeverageCDNslikeCloudflareforservin

Dependency Injection in PHP: Code Examples for BeginnersDependency Injection in PHP: Code Examples for BeginnersMay 14, 2025 am 12:08 AM

You should care about DependencyInjection(DI) because it makes your code clearer and easier to maintain. 1) DI makes it more modular by decoupling classes, 2) improves the convenience of testing and code flexibility, 3) Use DI containers to manage complex dependencies, but pay attention to performance impact and circular dependencies, 4) The best practice is to rely on abstract interfaces to achieve loose coupling.

PHP Performance: is it possible to optimize the application?PHP Performance: is it possible to optimize the application?May 14, 2025 am 12:04 AM

Yes,optimizingaPHPapplicationispossibleandessential.1)ImplementcachingusingAPCutoreducedatabaseload.2)Optimizedatabaseswithindexing,efficientqueries,andconnectionpooling.3)Enhancecodewithbuilt-infunctions,avoidingglobalvariables,andusingopcodecaching

PHP Performance Optimization: The Ultimate GuidePHP Performance Optimization: The Ultimate GuideMay 14, 2025 am 12:02 AM

ThekeystrategiestosignificantlyboostPHPapplicationperformanceare:1)UseopcodecachinglikeOPcachetoreduceexecutiontime,2)Optimizedatabaseinteractionswithpreparedstatementsandproperindexing,3)ConfigurewebserverslikeNginxwithPHP-FPMforbetterperformance,4)

PHP Dependency Injection Container: A Quick StartPHP Dependency Injection Container: A Quick StartMay 13, 2025 am 12:11 AM

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Dependency Injection vs. Service Locator in PHPDependency Injection vs. Service Locator in PHPMay 13, 2025 am 12:10 AM

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHP performance optimization strategies.PHP performance optimization strategies.May 13, 2025 am 12:06 AM

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHP Email Validation: Ensuring Emails Are Sent CorrectlyPHP Email Validation: Ensuring Emails Are Sent CorrectlyMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software