PHP

Como baixar várias imagens listadas em um arquivo CSV – PHP

Como baixar várias imagens de URL “endereços” diferentes salvas em um arquivo “CSV” utilizando um script PHP.

Primeiro, lendo o arquivo CSV

Crie um arquivo PHP com seguinte conteúdo.

Neste parte iremos ler, linha a linha do arquivo CSV que contém o endereço completo das imagens que desejamos baixar.

$csvFile = file('imagens.csv');

foreach ($csvFile as $line) {
   echo str_getcsv($line);
}

O código é bem simples, utilizando a função str_getcsv, iremos percorrer linha a linha do arquivo csv “imagens.csv” que está localizado no mesmo diretório de nosso script.

Observação:

As funções utilizadas acima são compatíveis com a versões do PHP >= 5.3.0

Script para baixar as imagens

Como referência irei utilizar este outro Post que aborda essa tema: Baixar e salvar imagens de uma URL com PHP

Mesclando o código acima utilizado na leitura do arquivo CSV com código utilizado para baixar uma imagem, temos:

$csvFile = file('imagens.csv');

foreach ($csvFile as $line) {
   
  $url = str_getcsv($line);
 
  $ch = curl_init($url[0]);

  $name = basename($url[0]);
 
  if (!file_exists('diretorio/' . $name)) {
    $fp = fopen('diretorio/' . $name, 'wb');
  }
 
  curl_setopt($ch, CURLOPT_FILE, $fp);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_exec($ch);
  curl_close($ch);
  fclose($fp);

}

Para baixar as imagens iremos utilizar a Biblioteca Client URL “curl” para “acessar” e “baixar” cada uma.

Já com a função “fopen” iremos salvar a imagem no diretório desejado, no exemplo “diretorio/”.

Outra função que estou utilizando antes de salvar a imagem é a “file_exists” que irá verificar se a imagem já foi salva antes, muito útil caso a execução do script seja interrompida.

Repare também na utilização da função “basename” para recuperar o nome da imagem que está na URL.

Tempo de execução

Caso você deseja realizar o download de uma grande quantidade de imagens você deverá aumentar o tempo de execução máxima que um script PHP pode ter, utilize a função:

ini_set('max_execution_time', 9999);

Você também pode realizar essa alteração no arquivo php.ini

max_execution_time = 9999

Os valores informados são em segundos.

Exemplo do arquivo CSV “imagens.csv”:

https://rogertakemiya.com.br/wp-content/uploads/2017/11/novas-atuaizacoes-para-o-magento-2-300x148.png,
https://rogertakemiya.com.br/wp-content/uploads/2017/11/sempre-melhorando-o-conteudo-seo-300x148.png,
https://rogertakemiya.com.br/wp-content/uploads/2017/11/dicas-de-design-parte-1-300x148.png

O arquivo CSV permite que de forma ordenada, linha a linha, separando as colunas por “,” listamos várias imagens em uma estrutura de fácil leitura pelo PHP.

O que é um arquivo CSV:

Comma-separated values (ou CSV) é um formato de arquivo que armazena dados tabelados, cujo grande uso data da época dos mainframes. Por serem bastante simples, arquivos .csv são comuns em todas as plataformas de computador.

O CSV é um implementação particular de arquivos de texto separados por um delimitador, que usa a vírgula e a quebra de linha para separar os valores.

O formato também usa as aspas em campos no qual são usados os caracteres reservados (vírgula e quebra de linha). Essa robustez no formato torna o CSV mais amplo que outros formatos digitais do mesmo segmento.

Conclusão de como baixar várias imagens

Você pode utilizar o modelo acima em diversas situações.

Interessante é que você adapte a sua necessidade, por exemplo, lendo uma tabela no banco de dados ou até mesmo baixando todas as imagens encontradas em uma página na web.

Qualquer dúvida, por favor, fique a vontade para fazer um comentário ou entrar em contato.

Links úteis

Código PHP para extrair as imagens de uma URL (website)

Ferramenta online para baixar todas as imagens de um site: Como baixar todas imagens de um site – Ferramenta Online

Ver comentários

  • desculpem a duvida de principiante mas se eu precisar passar junto um CURLOPT_HTTPHEADER => array( "Authorization: Bearer $token"),

    como ficaria o código?

    • Você pode fazer desta forma Claudio:
      curl_setopt($ch, CURLOPT_HEADER, array( “Authorization: Bearer $token”));

  • Uauuuu!
    Parabéns Roger, fantástico, eu havia pensado em como ler as URL's em serie, e olha já programo em PHP a algum tempo e não pensei em ler um ".CSV kkkk. Olha isso foi o máximo, me ajudou imensamente.
    Só relatando, funcionou no PHP 5.6.25.
    Como estou trabalhando com Magento, acabei encontrando um cliente que não tem as imagens dos produtos em repositório só link :( , e Roger, já pensou em transformar esta função em "Modulo" para o Magento.....? Pense...
    Muito feliz e grato pela sua ajuda, te recomendo mil vezes!

    Abraços

Post Recentes

Bloquear .env e .git no nginx: as regras que ainda deixam o arquivo vazar

Negar /.env no nginx parece resolvido até alguém pedir /wp-content/uploads/.env ou backup.sql. As regras que testei e os furos que…

13 horas atrás

Canonical errado no Yoast: corrigindo pelo filtro wpseo_canonical

O Search Console marca suas páginas 2, 3 e 4 como alternativas da página 1? Ajuste a tag canônica do…

17 horas atrás

Layout XML do Magento 2: remover bloco de módulo de terceiro

Um módulo de terceiro plantou um banner no topo da loja e você não quer desinstalar nada: tire o bloco…

1 dia atrás

Restaurar dump do Magento 2 em outro servidor: trocar a base_url no SQL

Importou o banco de produção e o site pula para o domínio antigo? Rode o UPDATE em core_config_data, limpe o…

2 dias atrás

Criar exceção customizada em PHP: quando estender Exception compensa

Seu catch trata pedido inexistente e banco fora do ar do mesmo jeito. Veja como criar exceção customizada em PHP…

3 dias atrás

DataProvider Magento 2: form do admin abre com campos vazios ao editar

O form do admin salva mas abre em branco na edição: veja o getData() indexado pelo id da entidade e…

4 dias atrás