Unexpected Connection Reset: A PHP or an Apache is

2019-01-18 23:45发布

问题:

I have a PHP script that keeps stopping at the same place every time and my browser reports:

The connection to the server was reset while the page was loading.

I have tested this on Firefox and IE, same thing happens. So, I am guessing this is an Apache/PHP config problem. Here are few things I have set.

PHP.ini

max_execution_time = 300000 
max_input_time = 300000
memory_limit = 256M 

Apache (httpd.conf)

Timeout 300000
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 0

Are the above correct? What can be causing this and what can I set?

I am running PHP (5.2.12.12) as a module on Apache (2.2) on a Windows Server 2003.

It is very likely this is an Apache or PHP issue as all browsers do the same thing. I think the script runs for exactly 10 mins (600 seconds).

回答1:

I had a similar issue - turns out apache2 was segfaulting. Cause of the segfault was php5-xdebug for 5.3.2-1ubuntu4.14 on Ubuntu 10.04 LTS. Removing xdebug fixed the problem.



回答2:

I also had this problem today, it turned out to be a stray break; statement in the PHP code (outside of any switch or any loop), in a function with a try...catch...finally block.

Looks like PHP crashes in this situation:

<?php

function a ()
{
    break;

    try
    {
    }
    catch (Exception $e)
    {
    }
    finally
    {
    }
}

This was with PHP version 5.5.5.



回答3:

Differences between 2 PHP configs were indeed the root cause of the issue on my end. My app is based on the NuSOAP library.

On config 1 with PHP 5.2, it was running fine as PHP's SOAP extension was off.

On config 2 with PHP 5.3, it was giving "Connection Reset" errors as PHP's SOAP extension was on.

Switching the extension off allowed to get my app running on PHP 5.3 without having to rewrite everything.



回答4:

I had an issue where in certain cases PHP 5.4 + eAccelerator = connection reset. There was no error output in any log files, and it only happened on certain URLs, which made it difficult to diagnose. Turns out it only happened for certain PHP code / certain PHP files, and was due to some incompatibilities with specific PHP code and eAccelerator. Easiest solution was to disable eAccelerator for that specific site, by adding the following to .htaccess file

php_flag eaccelerator.enable 0

php_flag eaccelerator.optimizer 0

(or equivalent lines in php.ini):

eaccelerator.enable="0"

eaccelerator.optimizer="0"



回答5:

It's an old post, I know, but since I couldn't find the solution to my problem anywhere and I've fixed it, I'll share my experience. The main cause of my problem was a file_exists() function call.
The file actually existed, but for some reason an extra forward slash on the file location ("//") that normally works on a regular browser, seems not to work in PHP. Maybe your problem is related to something similar. Hope this helps someone!



回答6:

I'd try setting all of the error reporting options

-b on error batch abort
-V severitylevel
-m error_level

and sending all the output to the client

<?php
echo "<div>starting sql batch</div>\n<pre>"; flush();
passthru('sqlcmd -b -m -1 -V 11 -l 3 -E -S TYHSY-01 -d newtest201 -i "E:\PHP_N\M_Create_Log_SP.sql"');
echo '</pre>done.'; flush();


回答7:

My PHP was segfaulting without any additional information as to the cause of it as well. It turned out to be two classes calling each other's magic __call() method because both of them didn't have the method being called. PHP just loops until it's out of memory. But it didn't report the usual "Allowed memory size of * bytes exhausted" message, probably because the methods are "magic".