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

WordPress não aparece no Google: noindex esquecido e robots.txt virtual

Site novo há semanas e nenhuma página indexada? Confira a caixinha de visibilidade em Leitura, o noindex no HTML e…

18 horas atrás

array_map perde as chaves do array no PHP: como manter o índice

O retorno do array_map voltou com índice 0, 1, 2 e o código que dependia da chave quebrou. Entenda quando…

1 dia atrás

Backup do Magento 2 com mysqldump: dump leve sem as tabelas de log

Dump de 12 GB que demora horas porque arrasta report_event e cron_schedule. Faça o backup em duas passadas, guarde só…

2 dias atrás

Preference do di.xml não aplica no Magento 2: o que checar antes

Escreveu a preference e o Magento 2 continua usando a classe original? Confira a área do di.xml, o generated/code e…

3 dias atrás

Filtro por atributo do WooCommerce vazio: global x personalizado

Cadastrou Cor direto na aba Atributos do produto e o filtro por atributo vem vazio. Veja como identificar o tipo,…

3 dias atrás

wp db query: rodar SQL no WordPress pelo WP-CLI sem phpMyAdmin

Precisa de um SELECT no banco do cliente e só tem SSH? O wp db query pega a senha do…

4 dias atrás