Array
(
)

500 - Internal Server Error

PHP
Alekym
   - 02 abr 2015

Olá pessoal, estou encontrando dificuldades em resolver um erro 500 numa pagina do meu sistema.
O que ocorre é que está pagina faz upload de um arquivo .DBF e depois o lê.
Quanto ao upload, tudo certo, porem quando ele começa a ler o arquivo, demora muito e ao final dá 500 - Internal Server Error.
Li em um site que poderia ser o .htacces que estaria dando problema, então removi ele(mas mantive um backup) e o php.ini está configurado da seguinte maneira:
./configure --enable-dbase.extension=php_dbase.dll

allow_url_fopen = On
memory_limit = 6144M
post_max_size = 1000M
upload_max_filesize = 1000M
max_input_time = 259200
max_execution_time 259200

Já tentei de tudo e nada funciona.
Desde já, agradeço.

Randrade
   - 02 abr 2015

Qual o tamanho do arquivo que você está tentando realizar o upload?
É para um servidor externo ou para seu computador pessoal?

Alekym
   - 02 abr 2015

O tamanho do arquivo é em torno de 7MB, são 2 arquivos.

É para um servidor de hospedagem externo, mas o upload funciona, o problema é na hora da leitura.

Randrade
   - 02 abr 2015

Bom, valos lá.

Sem seu código de upload não podemos analisar o funcionamento. Se possível, poste o mesmo.

Tente mudar o php.ini para:

#Código

memory_limit = 50M
post_max_size = 8M
file_uploads = On
upload_max_filesize = 8M


Porém, encontrei essa solução no FAQ da UolHost, pode ser que resolva:

Citação:
A mensagem de erro: 500-Internal server error. There is a problem with the resource you are looking for, and it cannot be displayed" ocorrerá quando você executar o Upload de um arquivo maior do que 1MB.

Para aumentar o tamanho máximo do arquivo enviado por upload de um arquivo é necessário incluir os parâmetros abaixo no seu arquivo Web.config:

#Código
<configuration>
<system.webserver>
<security>
<requestfiltering>
<requestlimits maxallowedcontentlength="x">
</requestlimits></requestfiltering>
</security>
</system.webserver>
</configuration>


Onde "x" é o tamanho máximo do arquivo em Bytes.

ATENÇÃO: Caso o arquivo web.config não exista crie-o na pasta raiz de sua estrutura de diretórios e salve com o conteúdo destacado acima.


Faq UolHost

Alekym
   - 02 abr 2015

Obrigado por sua ajuda, mas o problema NÃO É O UPLOAD!!!

O problema é a leitura do arquivo.

Segue o código da pagina de leitura:

#Código

<?
@header("Cache-Control: no-cache, must-revalidate");
@header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
@header("Content-Type: application/xml; charset=utf-8");

error_reporting(E_ALL);

/*set_time_limit(80000);

ini_set('upload_max_filesize','1000M');
ini_set('post_max_size','1000M');
ini_set('max_input_time',1000);
ini_set('max_execution_time',80000);*/

$erro = false;

if(empty($_FILES['arquivo']['name']))
{
	?>
		<script>
			alert('Favor selecionar um arquivo .DBF para importação!');
			document.location.replace('panel.php?m=beneficiarios&a=index.php');
		</script>
	<?
	exit();
}else
{
	//echo $_FILES['arquivo']['name'];
	
	$ext = strtolower(strrchr($_FILES['arquivo']['name'],'.'));
		
	if($ext != '.dbf')
	{
		?>
			<script>
				alert('Arquivos somente no formato .DBF!');
				document.location.replace('panel.php?m=beneficiarios&a=index.php');
			</script>
		<?
		exit();
	}
	
	//@unlink('dbfs/'.$_FILES['arquivo']['name']);
	
	
	if(move_uploaded_file($_FILES['arquivo']['tmp_name'],'dbfs/'.$_FILES['arquivo']['name']))
	{
		/// LEITURA DO DBF E LAN�AMENTO NO BANCO DE DADOS
		
		$query_truncate = "DELETE FROM beneficiarios";
		if(!mysql_query($query_truncate))
		{
			$erro = true;
			exit();
		}
	}else
	{
		?>
			<script>
				alert('Erro ao mover arquivo!');
				document.location.replace('panel.php?m=beneficiarios&a=index.php');
			</script>
		<?
		exit();
	}

	//$query_truncate
	
	$db = dbase_open('dbfs/ASSE1.dbf',0);
	//echo "aquii";
	
	if ($db) 
	{
	    
        
		$record_numbers = dbase_numrecords($db);
		for ($i = 1; $i <= $record_numbers; $i++) 
		{
			$row = dbase_get_record_with_names($db, $i);
			
			if($row['SEXO']=='M')
			{
				$sexo = '1';
			
			}elseif($row['SEXO']=='F')
			{
				$sexo = '3';
			}
			
			
			$echo1 = substr_count($row['DATAM'],'1');
			$echo2 = substr_count($row['DATAM'],'2');
			$echo3 = substr_count($row['DATAM'],'3');
			$echo4 = substr_count($row['DATAM'],'4');
			$echo5 = substr_count($row['DATAM'],'5');
			$echo6 = substr_count($row['DATAM'],'6');
			$echo7 = substr_count($row['DATAM'],'7');
			$echo8 = substr_count($row['DATAM'],'8');
			$echo9 = substr_count($row['DATAM'],'9');
			
			$nascimento = dateToUS($row['NASCIMENTO']);
			
			if($echo1!=0 || $echo2!=0 || $echo3!=0 || $echo4!=0 || $echo5!=0 || $echo6!=0 || $echo7!=0 || $echo8!=0 || $echo9!=0)
			{
				//echo "aqui";
				$cancelamento = 'S';
				
			}elseif($echo1==0 && $echo2==0 && $echo3==0 && $echo4==0 && $echo5==0 && $echo6==0 && $echo7==0 && $echo8==0 && $echo9==0)
			{
				//echo "aqui2";
				$cancelamento = 'N';
			}
			
			/*echo $row['DATAM'];
			echo "---->";
			echo $row['CHAPA'];
			echo "---->";
			echo $cancelamento;
			echo "<br>";*/
			
			$query_testa = "SELECT codigo FROM beneficiarios WHERE codigo = '{$row['CHAPA']}.00000'";
			$query_testa = mysql_query($query_testa);
			
            
            $query_banco = "SELECT * FROM bancos WHERE codigo_compensacao = '{$row['BANCO']}'";
            $query_banco = mysql_query($query_banco);
            
            $dados_banco = mysql_fetch_array($query_banco);
            
            $cep = trim($row['CEP']);
            
            $tamanho_cep = strlen($cep);
            
            if(!empty($cep) || $tamanho_cep==9)
            {
                $cep3 = explode('-',$row['CEP']);
            
                $cep2 = implode('',$cep3);
                
                $cep = trim($cep2);
                
                $query_municipio = "SELECT * FROM ceps WHERE cep = '{$cep}'";
                                
                if(mysql_query($query_municipio))
                {
                    $query_municipio = mysql_query($query_municipio);
                
                    $dados_municipio = mysql_fetch_array($query_municipio);
                }   
            }            
            
            
			if(mysql_num_rows($query_testa)==0)
			{
                            
                $nascimento = dateToUs($row['NASCIMENTO']);
                
                $ingresso = dateToUs($row['INGRESSO']);
                
                
                if(!empty($row['CD_IBGE']))
                {
                   $codigo_ibge = $row['CD_IBGE']; 
                }else
                {
                    $codigo_ibge = null;           
                }
                
               $data_carencia = dateToUs($row['DB']);
               
               $cpf = substr($row['CPF'],0,3).'.'.substr($row['CPF'],3,3).'.'.substr($row['CPF'],6,3).'-'.substr($row['CPF'],9,2);
                
                
                $query = "INSERT INTO beneficiarios(codigo,nome,numero_carteira,cartao_saude,sexo,data_ingresso,data_nascimento,municipio_residencia,registro_plano,excluido,tipo,banco,agencia,conta_corrente, data_carencia, motivo_carencia,cpf,aproveitamento_carencia, titular) VALUES ('".addslashes(str_pad(trim($row['CHAPA']),5,'0',STR_PAD_LEFT)).".00000"."','".addslashes(trim($row['NOME']))."','".addslashes(str_replace(' ','',str_pad(trim($row['CHAPA']),5,'0',STR_PAD_LEFT))).".00000"."','".addslashes(trim($row['CNS']))."','{$sexo}','{$ingresso}','{$nascimento}','{$dados_municipio['ibge']}','01','{$cancelamento}','T','{$dados_banco['nome_banco']}','".trim($row['AGENCIA'])."','".trim($row['CONTA'])."','{$data_carencia}','".addslashes(trim($row['DBO']))."','{$cpf}','N','".addslashes(str_pad(trim($row['CHAPA']),5,'0',STR_PAD_LEFT)).".00000')";
				//exit();
				
				if(!mysql_query($query))
				{
					echo $query;
                    echo "<br><br>";
					$erro = true;
                    break;
				}
			}
		
		}
	}
	//exit();
	//echo "<br><br><br>";
	
	$db2 = dbase_open('dbfs/ASSE2.dbf',0);
	
	//echo "aquii";
	if ($db2) 
	{
		$record_numbers2 = dbase_numrecords($db2);
		for ($i2 = 1; $i2 <= $record_numbers2; $i2++) 
		{
			$row2 = dbase_get_record_with_names($db2, $i2);
			
			if($row2['SEXO']=='M')
			{
				$sexo2 = '1';
			
			}elseif($row2['SEXO']=='F')
			{
				$sexo2 = '3';
			}
			
			$echo12 = substr_count($row2['DATAM'],'1');
			$echo22 = substr_count($row2['DATAM'],'2');
			$echo32 = substr_count($row2['DATAM'],'3');
			$echo42 = substr_count($row2['DATAM'],'4');
			$echo52 = substr_count($row2['DATAM'],'5');
			$echo62 = substr_count($row2['DATAM'],'6');
			$echo72 = substr_count($row2['DATAM'],'7');
			$echo82 = substr_count($row2['DATAM'],'8');
			$echo92 = substr_count($row2['DATAM'],'9');
			
			
							
			if($echo12!=0 || $echo22!=0 || $echo32!=0 || $echo42!=0 || $echo52!=0 || $echo62!=0 || $echo72!=0 || $echo82!=0 || $echo92!=0)
			{
				//echo "aqui";
				$cancelamento2 = 'S';
				
			}elseif($echo12==0 && $echo22==0 && $echo32==0 && $echo42==0 && $echo52==0 && $echo62==0 && $echo72==0 && $echo82==0 && $echo92==0)
			{
				//echo "aqui2";
				$cancelamento2 = 'N';
			}
			
			/*echo $row2['DATAM'];
			echo "---->";
			echo $row2['CHAPA']."-".$row2['SEQ'];
			echo "---->";
			echo $cancelamento2;
			echo "<br>";*/
			
            
			$nascimento2 = dateToUS($row2['NASCIMENTO']);
			
			$ingresso2 = dateToUs($row2['INGRESSO']);
                        
			
			$query_testa2 = "SELECT codigo FROM beneficiarios WHERE codigo = '".$row2['CHAPA'].".".$row2['SEQ']."'";
			$query_testa2 = mysql_query($query_testa2);
			
			$data_carencia2 = dateToUs($row2['DB']);
			
			$cpf2 = substr($row2['CPF'],0,3).'.'.substr($row2['CPF'],3,3).'.'.substr($row2['CPF'],6,3).'-'.substr($row2['CPF'],9,2);
			
            
			$cep = trim($row2['CEP']);
            
            $tamanho_cep = strlen($cep);
            
            if(!empty($cep) || $tamanho_cep==9)
            {
                $cep3 = explode('-',$row2['CEP']);
            
                $cep2 = implode('',$cep3);
                
                $cep = trim($cep2);
                
                $query_municipio = "SELECT * FROM ceps WHERE cep = '{$cep}'";
                                
                if(mysql_query($query_municipio))
                {
                    $query_municipio = mysql_query($query_municipio);
                
                    $dados_municipio = mysql_fetch_array($query_municipio);
                }   
            } 
                         
			
			if(mysql_num_rows($query_testa2)==0)
			{
                $nascimento2 = dateToUs($row2['NASCIMENTO']);
                            
				$query2 = "INSERT INTO beneficiarios(codigo,nome,numero_carteira,cartao_saude,sexo,data_ingresso,data_nascimento,municipio_residencia,registro_plano,excluido,tipo,banco,agencia,conta_corrente, data_carencia, motivo_carencia,cpf,aproveitamento_carencia, titular) VALUES ('".addslashes(str_pad(trim($row2['CHAPA']),5,'0',STR_PAD_LEFT).".".str_pad(trim($row2['SEQ']),5,'0',STR_PAD_LEFT))."','".addslashes(trim($row2['NOME']))."','".addslashes(str_pad(trim($row2['CHAPA']),5,'0',STR_PAD_LEFT)).".".str_pad(trim($row2['SEQ']),5,'0',STR_PAD_LEFT)."','".addslashes(trim($row2['CNS']))."','{$sexo2}','{$ingresso2}','{$nascimento2}','{$dados_municipio['ibge']}','01','{$cancelamento2}','D','','','','{$data_carencia2}','".addslashes(trim($row2['DBO']))."','{$cpf2}','N','".addslashes(str_pad(trim($row2['CHAPA']),5,'0',STR_PAD_LEFT)).".00000')";
				//echo "<br>";
				//exit();
				
				
				if(!mysql_query($query2))
				{
					echo $query2;
                    echo "<br><br>";
					$erro = true;
					break;
				}
			}
		
		}
	}
	
}


if($erro == true)
{
	?>
		<script>
			alert('Erro ao importar beneficiarios!');
			document.location.replace('panel.php?m=beneficiarios&a=index.php');
		</script>
	<?
	exit();
}else 
{
	?>
		<script>
			alert('Sucesso ao importar beneficiarios!');
			document.location.replace('panel.php?m=beneficiarios&a=listar.php');
		</script>
	<?
	exit();
}

?>


Agora, aparentemente, o erro 500 sumiu, mas o script não importa todos os registros do DBF para o banco MySql.

São ao total ~15.000 registros, e ele só importa no máximo 4.000 .