Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas Peperaio

[Resolvido] For php funciona de forma diferente em localhost e on

Recommended Posts

Bem galera, em dois anos de PHP, eu nunca tinha visto um erro desses. Ok, é bem possível que um código não funcione de igual forma local e no servidor, por questão de extensões e configurações, mas um FOR não funcionar.. hehehehe mítico!

 

O cenário é o seguinte, eu tenho um array e estou ordenando ele com a estrutura FOR. Passando as mesmas informações em localhost e no servidor, a saída é diferente. Vejam:

 

Este é o array, o mesmo passado para os dois ambientes ($_POST['galeria']):

Array
(
[0] => Array
   	(
       	[0] => 1
       	[1] => 2
       	[2] => 3
       	[3] => 4
       	[4] => 5
       	[5] => 6
   	)

[1] => Array
   	(
       	[0] => jpg
       	[1] => jpg
       	[2] => jpg
       	[3] => jpg
       	[4] => jpg
       	[5] => jpg
   	)

[2] => Array
   	(
       	[0] => galeria/slideshow/1.jpg
       	[1] => galeria/slideshow/2.jpg
       	[2] => galeria/slideshow/3.jpg
       	[3] => galeria/slideshow/4.jpg
       	[4] => galeria/slideshow/5.jpg
       	[5] => galeria/slideshow/6.jpg
   	)

[3] => Array
   	(
       	[0] => 314.05 KB
       	[1] => 369.13 KB
       	[2] => 354.6 KB
       	[3] => 105.94 KB
       	[4] => 277.52 KB
       	[5] => 162.86 KB
   	)

[4] => Array
   	(
       	[0] => 868
       	[1] => 868
       	[2] => 868
       	[3] => 868
       	[4] => 868
       	[5] => 868
   	)

[5] => Array
   	(
       	[0] => 514
       	[1] => 514
       	[2] => 514
       	[3] => 514
       	[4] => 514
       	[5] => 514
   	)

[6] => Array
   	(
       	[0] => 
       	[1] => 
       	[2] => 
       	[3] => 
       	[4] => 
       	[5] => 
   	)

)

 

Este é o for, também o mesmo para os dois ambientes:

<?php
//número de itens na galeria
$count = count($_POST['galeria'][0]);

//organizando o Array 
for($i = 0; $i < count($_POST['galeria']); $i++){
	for($x = 0; $x < $count; $x ++){
		$galeria[$x][] = $_POST['galeria'][$i][$x];
	}
}
?>

 

Saída em localhost, está funcionando da forma como eu quero:

Array
(
[0] => Array
   	(
       	[0] => 1
       	[1] => jpg
       	[2] => galeria/slideshow/1.jpg
       	[3] => 314.05 KB
       	[4] => 868
       	[5] => 514
       	[6] => 
   	)

[1] => Array
   	(
       	[0] => 2
       	[1] => jpg
       	[2] => galeria/slideshow/2.jpg
       	[3] => 369.13 KB
       	[4] => 868
       	[5] => 514
       	[6] => 
   	)

[2] => Array
   	(
       	[0] => 3
       	[1] => jpg
       	[2] => galeria/slideshow/3.jpg
       	[3] => 354.6 KB
       	[4] => 868
       	[5] => 514
       	[6] => 
   	)

[3] => Array
   	(
       	[0] => 4
       	[1] => jpg
       	[2] => galeria/slideshow/4.jpg
       	[3] => 105.94 KB
       	[4] => 868
       	[5] => 514
       	[6] => 
   	)

[4] => Array
   	(
       	[0] => 5
       	[1] => jpg
       	[2] => galeria/slideshow/5.jpg
       	[3] => 277.52 KB
       	[4] => 868
       	[5] => 514
       	[6] => 
   	)

[5] => Array
   	(
       	[0] => 6
       	[1] => jpg
       	[2] => galeria/slideshow/6.jpg
       	[3] => 162.86 KB
       	[4] => 868
       	[5] => 514
       	[6] => 
   	)

)

 

Saída online, misteriosamente um resultado completamente diferente (Mother Fuck):

Array
(
[0] => Array
   	(
       	[0] => 1
       	[1] => 2
       	[2] => 3
       	[3] => 4
       	[4] => 5
       	[5] => 6
       	[6] => 1
       	[7] => jpg
       	[8] => galeria/teste/1.jpg
       	[9] => 314.05 KB
       	[10] => 868
       	[11] => 514
       	[12] => 
   	)

[1] => Array
   	(
       	[0] => jpg
       	[1] => jpg
       	[2] => jpg
       	[3] => jpg
       	[4] => jpg
       	[5] => jpg
       	[6] => 2
       	[7] => jpg
       	[8] => galeria/teste/2.jpg
       	[9] => 369.13 KB
       	[10] => 868
       	[11] => 514
       	[12] => 
   	)

[2] => Array
   	(
       	[0] => galeria/teste/1.jpg
       	[1] => galeria/teste/2.jpg
       	[2] => galeria/teste/3.jpg
       	[3] => galeria/teste/4.jpg
       	[4] => galeria/teste/5.jpg
       	[5] => galeria/teste/6.jpg
       	[6] => 3
       	[7] => jpg
       	[8] => galeria/teste/3.jpg
       	[9] => 354.6 KB
       	[10] => 868
       	[11] => 514
       	[12] => 
   	)

[3] => Array
   	(
       	[0] => 314.05 KB
       	[1] => 369.13 KB
       	[2] => 354.6 KB
       	[3] => 105.94 KB
       	[4] => 277.52 KB
       	[5] => 162.86 KB
       	[6] => 4
       	[7] => jpg
       	[8] => galeria/teste/4.jpg
       	[9] => 105.94 KB
       	[10] => 868
       	[11] => 514
       	[12] => 
   	)

[4] => Array
   	(
       	[0] => 868
       	[1] => 868
       	[2] => 868
       	[3] => 868
       	[4] => 868
       	[5] => 868
       	[6] => 5
       	[7] => jpg
       	[8] => galeria/teste/5.jpg
       	[9] => 277.52 KB
       	[10] => 868
       	[11] => 514
       	[12] => 
   	)

[5] => Array
   	(
       	[0] => 514
       	[1] => 514
       	[2] => 514
       	[3] => 514
       	[4] => 514
       	[5] => 514
       	[6] => 6
       	[7] => jpg
       	[8] => galeria/teste/6.jpg
       	[9] => 162.86 KB
       	[10] => 868
       	[11] => 514
       	[12] => 
   	)

[6] => Array
   	(
       	[0] => 
       	[1] => 
       	[2] => 
       	[3] => 
       	[4] => 
       	[5] => 
   	)

)

 

<_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você sabe que o problema é no for? você avaliou a entrada de dados, conteúdo de POST, antes de processar nos 2 ambientes?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, é no for, fiz todos os testes para chegar nisso..

O array é o mesmo passado para os dois ambientes, e logo após o for:

 

echo "<pre>";
print_r($galeria);
echo "</pre>";
die();

 

Por isso falei..o erro é mítico..

Não sei se isso ajuda, mas estou testando o script online na Net Revenda e Dreamhost

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certeza amigo, o arquivo .php é igual para os dois.

O mais estranho é que não há erros (pelo menos não visíveis em meu código), em ambos os ambientes eu trabalho com a diretiva de erros "E_ALL"

 

Edit

 

Puts... problema resolvido, por algum motivo em localhost eu consegui atribuir um array multid. numa variável ainda não declarada, online isso não funcionava, vejam:

Código errado:

<?php
for($i = 0; $i < count($_POST['galeria']); $i++){
	for($x = 0; $x < $count; $x ++){
		$galeria[$x][] = $_POST['galeria'][$i][$x]; //nomes
	}
}
?>

 

Código certo(atribuindo um array vazio para poder posteriormente adicionar arrays com o colchete vazio [])

<?php
$galeria = array();

//organizando o Array 
for($i = 0; $i < count($_POST['galeria']); $i++){
	for($x = 0; $x < $count; $x ++){
		$galeria[$x][] = $_POST['galeria'][$i][$x]; //nomes
	}
}
?>

 

Fica uma dica pra galera..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito estranho porque segundo a documentação de array_push():

 

Nota: array_push() irá emitir um aviso se o primeiro argumento não for um array. isto é diferente do funcionamento de $var[] aonde uma nova matriz é criada

Ou seja, aquela variável estaria sendo criada na hora, durante a primeira iteração.

 

Será que convém encaminhar esse tópico para o suportedo seu servidor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho mesmo, mas nem adianta chamar o suporte, pra eles se deu certo ok, deu errado f**-se

Valeu pela atenção e ajuda parceiros!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.