Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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] =>
)
)
<_<
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
Tem certeza que os codigos estão idênticos nos 2 ambientes? Não esta faltando nenhuma chave {}?
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..
Deve ser algum parametro diferente no php.ini que causa a diferença de comportamento.
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?
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!
Como você sabe que o problema é no for? você avaliou a entrada de dados, conteúdo de POST, antes de processar nos 2 ambientes?