Ir para conteúdo

POWERED BY:

Arquivado

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

eronventer

[Resolvido] Definir o índice da imagem

Recommended Posts

Olá pessoal,

 

No script abaixo eu pego o total de arquivos dentro do diretório "fotos" e em seguida conto os arquivos divindo por 5, pois são 5 tamanhos diferentes de imagem que irão ser gravadas na pasta, porém se tenho as imagens 1.jpg, 2.jpg, 3.jpg, 5.jpg, 6.jpg, 7,jpg e 9.jpg e for realizar mais uploads eu preciso que as próximas imagens recebam como nome os índices que faltam e complete com os demais. Por exemplo, se eu for fazer o upload de mais 4 imagens os nomes a serem gravados deveriam ser: 4.jpg, 8.jpg, 10.jpg e 11.jpg, porém não estou conseguindo definir esses nomes sempre acaba dando os indices que ja existem e daí vai acabar substituindo imagens já existentes.

 

$fotos = abreDiretorio("../fotos/");
$total = ceil(count($fotos)/5);
$files = $_FILES;

for ($i=1; $i<=count($files); $i++)
{
$nomef = $i;
$campo = 'foto'.$i;

if (file_exists($dir."/".$nomef.".jpg"))
{
	echo $nomef.".jpg ja existe portanto será somado ao total<br>";
}
else
{
	echo $nomef.".jpg nao existe portanto ficara igual<br>";
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

UMA das possibilidades seria você criar um array "falso" com todos os valores possíveis.

 

Então, você obtém um array a partir daquilo que você já tem no diretório.

 

Computa a diferença do segundo (a princípio menor) para o primeiro (a princípio maior).

 

O array resultante conterá os nomes que não existem na pasta.

 

Daí você percorre a lista de arquivos do upload e, para cada um deles você puxa um item do início desse array.

 

Como essa função opera por referência, a cada nova iteração esse array vai ter um índice a menos.

 

Quando acabarem os itens do array, você continua com o nome atual.

 

Observe que isso é apenas uma idéia, escrita de cabeça, na correria antes de sair do serviço. Eu nem testei, na verdade, pode até parecer meio complexo. Sugiro antes ver se não há outra forma mais simples de fazer, mesmo que haja necessidade de reestruturar parte do sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po, não sei o que exatamente você está desenvolvendo, mas parece ser meio complicado isso que você quer.

 

Não seria melhor gerar um nome para as imagens? sei lá, baseado no tempo atual , ou em algum fragmento de hash?

 

por exemplo:

 

$img = time().".jpg";

 

Talvez para seu projeto não encaixe bem isso, mas é só uma idéia!

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como se trata de um site pronto eu só estou refazendo a plataforma de gerenciamento de conteúdos, por isso preciso seguir esse padrão.

Mas consegui resolver, abaixo o código.

 

$imags = array();
$fotos = abreDiretorio("../fotos/");
sort($fotos, SORT_NUMERIC);

foreach($fotos as $foto)
{
if (!strstr($foto, '_p') && !strstr($foto, '_pp') && !strstr($foto, '_m') && !strstr($foto, '_mm'))
{
   	$imags[strstr($foto, '.jpg', true)] = $foto;
}	
}

$chaves = array_keys($imags);
$ultima = $chaves[count($chaves)-1];
$indice = array();

for ($i=1; $i<=($ultima+count($file)); $i++)
{
if (!array_key_exists($i, $imags))
{
   	$indice[] = $i;
}
}

for ($i=1; $i<=($ultima+count($file)); $i++)
{
$campo = 'foto'.$i;

if ($file[$campo]['size'] > 0)
{
   	$nomef = $indice[$i-1];

   	$foto1 = imgUp($campo, $nomef, $dir, 448, 336);
   	$foto2 = imgUp($campo, $nomef."_m", $dir, 230, 173);
   	$foto3 = imgUp($campo, $nomef."_mm", $dir, 182, 136);
   	$foto4 = imgUp($campo, $nomef."_p", $dir, 113, 84);
   	$foto5 = imgUp($campo, $nomef."_pp", $dir, 85, 63);
}				
}

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.