Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Estou tentando mudar o formato de imagens enviadas pelos usuários. O user manda a imagem e ela é convertida antes de ser gravada no diretório do servidor. Observem:
if ($formato == "image/jpeg") {
$img = imagecreatefromjpeg($file['name']);
$nome = imagegif($img, md5($file['name']) . '.gif'); //esse empacotamento que voces veem é apenas para garantir que o nome não terá caracteres especiais. Essa é a forma mais prática que pensei.
}Erro retornado:Warning: imagecreatefromjpeg(imagem.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\wamp\www\teste\img.php on line 20
O problema é que ele não acha o diretório original da imagem e nem vai achar pq ele está na máquina do usuário. Já tentei pegar a imagem do diretório temporário mas não dá.
Obrigado!
Sieg Heil João !
Muito obrigado cara. Mais algumas perguntas: após copiar o arquivo do diretório temporário eu terei que apagar os arquivos dele, não é? Caso sim, farei isso no final do primeiro script. Outra coisinha: se eu tenho que criar o diretório temporário, então, é melhor copiar o arquivo do diretório temporário, que não tenho acesso, para outra pasta e lá dentro mudar o formato dele e o nome também e em seguida apagar o anterior. O que acha? Valeu mais uma vez!
>
Mais algumas perguntas: após copiar o arquivo do diretório temporário eu terei que apagar os arquivos dele, não é?
Sim, mas o primeiro código já faz isso para você:
/**
* Como o diretório já existia, verificamos se existe algum arquivo nele.
* Se existir, apagamos todos já que se trata de "diretório temporário".
*/
foreach ( glob( sprintf( '%s/.' , $myTempDir ) ) as $tmpFile ) {
unlink( $tmpFile );
}
>
se eu tenho que criar o diretório temporário, então, é melhor copiar o arquivo do diretório temporário, que não tenho acesso, para outra pasta e lá dentro mudar o formato dele e o nome também e em seguida apagar o anterior.
Já estamos fazendo isso também.
Aqui criamos o novo diretório temporário.
/**
* Ok, temos permissões de gravação, vamos criar o diretório
* temporário.
*/
mkdir( $myTempDir , 0760 );
Aqui apagamos do diretório temporário original e movemos para o novo.
/**
* Movemos todos os arquivos do upload para nosso diretório temporário
*/
foreach ( $_FILES as $key => $file ) {
$destination = sprintf( '%s/%s' , $myTempDir , $file[ 'tmp_name' ] );
if ( $file[ 'error' ] == UPLOAD_ERR_OK ) {
if ( move_uploaded_file( $file[ 'tmp_name' ] , $destination ) !== false ) {
$myFiles[ $key ] = $file;
$myFiles[ $key ][ 'tmp_name' ] = $destination;
} else {
trigger_error( sprintf( 'Falha ao mover o arquivo %s para o diretório temporário.' , $file[ 'name' ] ) , E_USER_WARNING );
}
}
}
Cada vez que um upload for feito, os arquivos temporários antigos serão removidos, então, tudo o que você precisa fazer é incluir o primeiro código no seu código que tratará os uploads.
Valeu João. Não querendo puxar seu caso por ter me ajudado, mas particularmente gosto de suas ajudas porque você além de ajudar nos dar uma aula de programação. Fica na paz e Até mais!
>
mas particularmente gosto de suas ajudas porque você além de ajudar nos dar uma aula de programação.
heheheh :D
Olha só como eu fiz:
http://forum.imasters.com.br/index.php?/topic/399876-upload-de-imagem-e-redimensionamento/
Esse caso não precisei criar o diretório temporário, pois logo após de gravar a imagem no diretório normal ela é sobreposta por ela mesmo só que com características diferentes (nome, formato, tamanho). Boa sorte!
Quando o usuário faz um upload, o arquivo é gravado em um diretório temporário no servidor; Normalmente você não tem acesso de leitura a esse diretório então, você deverá, necessariamente, utilizar a função move_uploaded_file() para mover o arquivo do upload, antes de começar a trabalhar com ele:
<?php
/**
* Nosso novo diretório temporário
* @var string
*/
$myTempDir = './temp';
/**
* Usaremos essa matriz em vez da super global $_FILES para acessar
* os arquivos do upload
* @var array
*/
$myFiles = array();
/**
* Verificamos a existência do diretório temporário, se não existir
* tentamos criá-lo.
*/
if ( !is_dir( $myTempDir ) ){
$pathinfo = pathinfo( $myTempDir );
/**
* Precisamos que o diretório base, onde o temporário será criado
* tenha permissões de gravação.
*/
if ( is_writable( $pathinfo[ 'dirname' ] ) ){
/**
* Ok, temos permissões de gravação, vamos criar o diretório
* temporário.
*/
mkdir( $myTempDir , 0760 );
} else {
} else {
/**
* Como o diretório já existia, verificamos se existe algum arquivo nele.
* Se existir, apagamos todos já que se trata de "diretório temporário".
*/
foreach ( glob( sprintf( '%s/.' , $myTempDir ) ) as $tmpFile ){
/**
* Movemos todos os arquivos do upload para nosso diretório temporário
*/
Com isso ai, você terá agora uma matriz chamada $myFiles contendo os arquivos do upload, mas no seu diretório temporário, com todas as permissões necessárias.