How to process multiple images that are inside a folder?

See all posts See thread Reply

Re: How to process multiple images that are inside a folder? new!
by Marcio Alves, 12 years, 6 months ago
Hi my friend

I am wanting to run a folder where the class contains several files sent via the form.

The uploaded file is a. Zip file containing multiple photos. Jpg inside.

I can do with that. Zip is sent, deleted and unpacked in the destination.

I'm just not able to put the unzipped files in the class.

See my code:

$diretorio = '/home/ceanorg/public_html/fotos/galeria/teste/';

//$files = array();

// Diretório atual
$d = dir('/home/ceanorg/public_html/fotos/galeria/teste/');

// Percorre todos os arquivos
while(false !== ($file = $d->read())){

  // Se o arquivo não é este arquivo, e não começa com "." ou "~", então guarde-o para exibição futura.
  if(($file{0} != '.') && ($file{0} != '~') ) {
    
    // Guarda o nome do arquivo e dados completos de uma chamada à stat()
    $files[$file] = stat($file);
  }
}

// Fecha o diretório
$d->close();   

//$files = array('/home/ceanorg/public_html/fotos/galeria/teste/006.jpg', '/home/ceanorg/public_html/fotos/galeria/teste/007.jpg', '/home/ceanorg/public_html/fotos/galeria/teste/008.jpg');
$files[$file] = array();

foreach ($files as $k => $l) {
  foreach ($l as $i => $v) {
    if (!array_key_exists($i, $files))
      $files[$i] = array();
    $files[$i][$k] = $v;
  }
}


foreach ($files as $file) {

  // we instanciate the class for each element of $file
  $handle = new Upload($file);

  // then we check if the file has been uploaded properly
  // in its *temporary* location in the server (often, it is /tmp)
  if ($handle->uploaded) {

    // now, we start the upload 'process'. That is, to copy the uploaded file
    // from its temporary location to the wanted location
    // It could be something like $handle->Process('/home/www/my_uploads/');
    $handle->image_resize            = true;
    $handle->image_ratio_y           = true;
    $handle->image_x                 = 100;
    $handle->Process($diretorio);
    
    // we check if everything went OK
    if ($handle->processed) {
      // everything was fine !
      echo '  file uploaded with success';
      echo '  ' . round(filesize($handle->file_dst_pathname)/256)/4 . 'KB';
      echo '  link to the file just uploaded: ' . $handle->file_dst_name . '';
    } else {
      // one error occured
      echo '  file not uploaded to the wanted location';
      echo '  Error: ' . $handle->error . '';
    }

  } else {
    // if we're here, the upload file failed for some reasons
    // i.e. the server didn't receive the file
    echo '  file not uploaded on the server';
    echo '  Error: ' . $handle->error . '';
  }
}
Reply
Re: How to process multiple images that are inside a folder? new!
by Marcio Alves, 12 years, 6 months ago
Error message that the class return:

file not uploaded on the server
Error: file_error

file not uploaded on the server
Error: file_error

file not uploaded on the server
Error:file_error

file not uploaded on the server
Error: file_errorReply
Re: How to process multiple images that are inside a folder? new!
by colin, 12 years, 6 months ago
Please provide the log produced by the classReply
Re: How to process multiple images that are inside a folder? new!
by Marcio Alves, 12 years, 6 months ago
Hi Colin. Thanks for help me.

First I am listing the files that are inside the folder with the following code:

$diretorio = '/home/ceanorg/public_html/fotos/galeria/teste/';

// abre o diretório
$ponteiro  = opendir($diretorio);

// monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {
    $itens[] = $nome_itens;
}

// ordena o vetor de itens
sort($itens);

// percorre o vetor para fazer a separacao entre arquivos e pastas 
foreach ($itens as $k) {

  // retira "./" e "../" para que retorne apenas pastas e arquivos
  if ($k!="." && $k!=".."){
    
    // checa se o tipo de arquivo encontrado é uma pasta
    if (is_dir($k)) {

      // caso VERDADEIRO adiciona o item à variável de pastas
      $pastas[]=$k;
  
    } else {
      
      // caso FALSO adiciona o item à variável de arquivos
      $files[]=$k;
    }
  }
}

So far, so OK

Then I want to put the files listed in an array. Exactly where the error happens.

1) If I use this (manual), the class works perfectly:
$files = array('/home/ceanorg/public_html/fotos/galeria/teste/001.jpg', 
  '/home/ceanorg/public_html/fotos/galeria/teste/002.jpg', 
  '/home/ceanorg/public_html/fotos/galeria/teste/003.jpg');


2) If I use this other way, the class is not executed
$files = array();


3) The remainder of the code is this:

foreach ($files as $k => $l) {
  foreach ($l as $i => $v) {
    if (!array_key_exists($i, $files))
      $files[$i] = array();
    $files[$i][$k] = $v;
  }
}
    
    
foreach ($files as $file) {

  // we instanciate the class for each element of $file
  $handle = new Upload($file, 'pt_BR');
  

  // then we check if the file has been uploaded properly
  // in its *temporary* location in the server (often, it is /tmp)
  if ($handle->uploaded) {

    // now, we start the upload 'process'. That is, to copy the uploaded file
    // from its temporary location to the wanted location
    // It could be something like $handle->Process('/home/www/my_uploads/');
    
    $handle->image_resize            = true;
    $handle->image_ratio_y           = true;
    $handle->image_x                 = 100;
    $handle->Process('/home/ceanorg/public_html/fotos/galeria/teste/');
    
    // we check if everything went OK
    if ($handle->processed) {
        // everything was fine !
        echo '  file uploaded with success';
        echo '  ' . round(filesize($handle->file_dst_pathname)/256)/4 . 'KB';
        echo '  link to the file just uploaded: ../../fotos/galeria/teste/' . $handle->file_dst_name . ' : ' . $handle->file_dst_name . '';
    } else {
        // one error occured
        echo '  file not uploaded to the wanted location';
        echo '  Error: ' . $handle->error . '';
    }

  } else {
    // if we're here, the upload file failed for some reasons
    // i.e. the server didn't receive the file
    echo '  file not uploaded on the server';
    echo '  Error: ' . $handle->error . '';
  }
}
Reply
Re: How to process multiple images that are inside a folder? new!
by colin, 12 years, 6 months ago
If you deal with local files, you don't need the first foreach loop.Reply