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

Cron do Magento 2 não roda: status missed e pending no cron_schedule

Pedido que não fatura e e-mail que não sai porque todo job fica missed: como ler a cron_schedule, conferir o…

12 horas atrás

Gerar slug de URL em PHP: acento, espaço e símbolo fora do endereço

Uma função curta em PHP 8.3 que transforma Camiseta Preta Tamanho GG em camiseta-preta-tamanho-gg, sem depender do locale do servidor.

1 dia atrás

Log de consentimento LGPD: a tabela MySQL que guarda a prova do aceite

O banner registra o clique só no navegador e some. Veja a tabela MySQL e o endpoint que gravam a…

2 dias atrás

Comando CLI Magento 2: criar a classe e registrar no di.xml

A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…

3 dias atrás

Traduzir o pt_BR.csv do Magento 2 em lote sem perder a coluna de origem

Como traduzir duas mil linhas do pt_BR.csv do Magento 2 lendo com fgetcsv e regravando com fputcsv, sem encostar na…

3 dias atrás

Variação não está disponível no WooCommerce: limpar transients e lookup

Produto variável respondendo "Desculpe, este produto não está disponível" mesmo com a variação ativa: limpe os transients do WooCommerce e…

4 dias atrás