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ódigomemory_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 .