Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diego Macêdo

[Resolvido] SWFUpload + PHP

Recommended Posts

Estou com a pasta na seguinte estrutura (apresentarei somente o necessários):

/temp/ (pasta temporária onde serão processadas as imagens enviadas)

/galerias/ (pasta para onde vão as fotos reduzidas e as miniaturas)

/galerias/abc123/ (a pasta 'abc123' será o nome da pasta que será puxada do BD)

/galerias/abc123/thumbs/ (pasta 'thumbs' eh a pasta das miniaturas)

/swfupload/ (arquivos de funcionamento do swfupload)

class.imghandler.php (Classe de manipulação de imagens)

upload.php (arquivo que recebe os arquivos e executa as ações)

index.php (formulário de envio do swfupload)

 

INDEX.PHP - Neste arquivo eu envio o id_galeria pelo GET e passo ele como POST através "post_params" para ser usado lá para efetuar a consulta no BD.

<?php
require_once("class.imghandler.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>SWFUpload Demos - Simple Demo</title>
<link href="swfupload/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="swfupload/swfupload.js"></script>
<script type="text/javascript" src="swfupload/swfupload.queue.js"></script>
<script type="text/javascript" src="swfupload/fileprogress.js"></script>
<script type="text/javascript" src="swfupload/handlers.js"></script>
<script type="text/javascript">
		var swfu;

		window.onload = function() {
			var settings = {
				flash_url : "swfupload/swfupload.swf",
				upload_url: "upload.php",
				post_params: {"id_galeria" : "<?php echo $_GET['id_galeria']; ?>"},
				file_size_limit : "8 MB",
				file_types : "*.*",
				file_types_description : "All Files",
				file_upload_limit : 0,
				file_queue_limit : 0,
				custom_settings : {
					progressTarget : "fsUploadProgress",
					cancelButtonId : "btnCancel"
				},
				debug: false,

				// Button settings
				button_image_url: "swfupload/TestImageNoText_65x29.png",
				button_width: "65",
				button_height: "29",
				button_placeholder_id: "spanButtonPlaceHolder",
				button_text: '<span class="theFont">Hello</span>',
				button_text_style: ".theFont { font-size: 16; }",
				button_text_left_padding: 12,
				button_text_top_padding: 3,
				
				// The event handler functions are defined in handlers.js
				file_queued_handler : fileQueued,
				file_queue_error_handler : fileQueueError,
				file_dialog_complete_handler : fileDialogComplete,
				upload_start_handler : uploadStart,
				upload_progress_handler : uploadProgress,
				upload_error_handler : uploadError,
				upload_success_handler : uploadSuccess,
				upload_complete_handler : uploadComplete,
				queue_complete_handler : queueComplete	// Queue plugin event
			};

			swfu = new SWFUpload(settings);
	     };
	</script>
</head>
<body>
<div id="header">
	<h1 id="logo"><a href="../">SWFUpload</a></h1>
	<div id="version">v2.2.0</div>
</div>

<div id="content">
	<h2>Simple Demo</h2>
	<form id="form1" action="index.php" method="post" enctype="multipart/form-data">
		<p>This page demonstrates a simple usage of SWFUpload.  It uses the Queue Plugin to simplify uploading or cancelling all queued files.</p>

			<div class="fieldset flash" id="fsUploadProgress">
			<span class="legend">Upload Queue</span>
			</div>
		<div id="divStatus">0 Files Uploaded</div>
			<div>
				<span id="spanButtonPlaceHolder"></span>
				<input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
			</div>

	</form>
</div>
</body>
</html>

UPLOAD.PHP - Este arquivo recebe o ID, consulta o nome da pasta no BD, pega os arquivos e envia pra pasta "temp", redimenciona e cria uma miniatura, transfere cada imagem para cada pasta específica do evento.

Se eu utilizar o ID=1, o nome da pasta será "abc123"

<?php
require("class.imghandler.php");

// Code for Session Cookie workaround
	if (isset($_POST['id_galeria'])) {
		session_id($_POST['id_galeria']);
	} else if (isset($_GET['id_galeria'])) {
		session_id($_GET['id_galeria']);
	}

	session_start();

// Verificar o tamanho máximo permitido de envio de arquivo pelo PHP
	$POST_MAX_SIZE = ini_get('post_max_size');
	$unit = strtoupper(substr($POST_MAX_SIZE, -1));
	$multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));

	if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
		header("HTTP/1.1 500 Internal Server Error"); // This will trigger an uploadError event in SWFUpload
		echo "O arquivo é maior que tamanho permitido no envio do POST.";
		exit(0);
	}

// Configurações
	$save_path = getcwd() . "/temp/";				// Diretório onde vamos salvar as fotos
	$upload_name = "Filedata";
	$max_file_size_in_bytes = 8388608;				// 8 MB em bytes
	$extension_whitelist = array("jpg");	// Extensões de arquivos válidos. Exemplo: array("jpg", "gif", "png");
	$valid_chars_regex = '.A-Z0-9_ !@#$%^&()+={}\[\]\',~`-';				// Caracteres aceitos no modo de Expressão Regular
	
// Outras variáveis
	$max_filename_length = 260; // Número máximo de carecteres no nome do arquivo
	$file_name = "";
	$file_extension = "";
	$uploadErrors = array(
        0=>"Não teve erro, o arquivo foi enviado com sucesso!",
        1=>"O arquivo excede o tamanho máximo do (upload_max_filesize) configurado no php.ini",
        2=>"O arquivo excede o tamanho máximo do (MAX_FILE_SIZE) especificado no formulário HTML",
        3=>"O arquivo foi enviado parcialmente.",
        4=>"Nenhum arquivo enviado.",
        6=>"Está faltando o diretório temporário"
	);


// Validação do upload
	if (!isset($_FILES[$upload_name])) {
		HandleError("Nenhum upload foi encontrado em \$_FILES para " . $upload_name);
		exit(0);
	} else if (isset($_FILES[$upload_name]["error"]) && $_FILES[$upload_name]["error"] != 0) {
		HandleError($uploadErrors[$_FILES[$upload_name]["error"]]);
		exit(0);
	} else if (!isset($_FILES[$upload_name]["tmp_name"]) || !@is_uploaded_file($_FILES[$upload_name]["tmp_name"])) {
		HandleError("Upload falhou no teste do (is_uploaded_file).");
		exit(0);
	} else if (!isset($_FILES[$upload_name]['name'])) {
		HandleError("O arquivo não tem nome.");
		exit(0);
	}
	
// Valida o tamanho do arquivo (O máximo permitido por este script é de 2 GB)
	$file_size = @filesize($_FILES[$upload_name]["tmp_name"]);
	if (!$file_size || $file_size > $max_file_size_in_bytes) {
		HandleError("O arquivo excede o tamanho máximo permitido.");
		exit(0);
	}
	
	if ($file_size <= 0) {
		HandleError("O tamanho do arquivo é menor que zero.");
		exit(0);
	}


// Valida o nome do arquivo (remove os carecteres inválidos)
	$file_name = preg_replace('/[^'.$valid_chars_regex.']|\.+$/i', "", basename($_FILES[$upload_name]['name']));
	if (strlen($file_name) == 0 || strlen($file_name) > $max_filename_length) {
		HandleError("Nome do arquivo é inválido");
		exit(0);
	}


// Valida que não irá sobrescrever nenhum arquivo que já exista.
	if (file_exists($save_path . $file_name)) {
		HandleError("Já existe um arquivo com este nome na pasta");
		exit(0);
	}

// Valida a extensão do arquivo
	$path_info = pathinfo($_FILES[$upload_name]['name']);
	$file_extension = $path_info["extension"];
	$is_valid_extension = false;
	foreach ($extension_whitelist as $extension) {
		if (strcasecmp($file_extension, $extension) == 0) {
			$is_valid_extension = true;
			break;
		}
	}
	if (!$is_valid_extension) {
		HandleError("Extensão do arquivo é inválida");
		exit(0);
	}
	
	###############################################################
	################# INÍCIO DO PROCESSAMENTO #####################
	###############################################################
	
	###############  BANCO DE DADOS  ###############
	// Conecta
	$servidor	= "localhost";
	$usuario 	= "root";
	$senha 		= "";
	$bd			= "swfupload";
	mysql_connect($servidor, $usuario, $senha) or exit(mysql_error());
	mysql_select_db($bd) or exit(mysql_error());
	// Consulta
	$query_rs_galeria = "SELECT * FROM `galeria` WHERE `id_galeria` = ".$_POST['id_galeria'].";";
	$rs_galeria 	= mysql_query($query_rs_galeria) or die("Erro ao efetuar a consulta no BD: ".mysql_error());
	$row_rs_galeria = mysql_fetch_assoc($rs_galeria);
	$pasta_galeria = $row_rs_galeria['pasta'];
	
	
	###############  CONFIGURAÇÕES  ###############
	// Informações das pastas
	$pasta = './temp/'; // Pasta temporária
	$tamanho_pasta = strlen($pasta); // Pega a quantidade de caracteres do nome da pasta para ser usada nas substr();
	$pasta_originais = "/galerias/".$pasta_galeria."/"; // Pasta das fotos originais
	$pasta_thumbs = "/galerias/".$pasta_galeria."/thumbs/"; // Pasta das miniaturas
	

	###############  PASSO 1 - MOVENDO O ARQUIVO PARA A PASTA "TEMP"  ###############
	if (!move_uploaded_file($_FILES['Filedata']['tmp_name'], $pasta.$file_name)) {
		HandleError("Arquivo não pode ser salvo na pasta TEMP.");
		exit(0);
	}else{
		###############  PASSO 2 - TRATANDO O NOME DO ARQUIVO  ###############
		// 1.1 Extensão do arquivo
		$arqName = $file_name;
		$extensao = explode('.', $arqName);
		$extensao = strtolower(end($extensao));
		
		// 1.2 Pegar nome do arquivo
		$nome = explode(".", $arqName);
		$nome = $nome[0];
		$nome = preg_replace("[^a-zA-Z0-9_]", "", strtr($nome, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));
		$nome = strtolower($nome);
		
		// 1.3 Monta novamente o nome do arquivo final
		$arqFoto = $nome.'.'.$extensao;
		
		
		
		###############  PASSO 3 - MANIPULA A FOTO  ###############
		$ImgHandler = new ImgHandler();
		$foto = $ImgHandler->saveImg( $arqName );
		$ImgHandler->createThumb( $foto );
		
		//3.1 Define o novo nome para a foto com logomarca
		$marcada_antiga = substr($foto,$tamanho_pasta);
		$nome = explode(".", $arqFoto);
		$nome = $nome[0];
		$marcada_nova = $nome."_".$marcada_antiga;
		rename($pasta.$marcada_antiga, $pasta.$marcada_nova);

		//3.2 Define o novo nome para a miniatura
		$miniatura_antiga = substr($foto,$tamanho_pasta);
		$miniatura_antiga = explode(".", $miniatura_antiga);
		$extensao = strtolower(end($miniatura_antiga));
		$miniatura_antiga = $miniatura_antiga[0];
		$miniatura_antiga = $miniatura_antiga."_thumb.".$extensao;
		$miniatura_nova = $nome."_".$miniatura_antiga;
		rename($pasta.$miniatura_antiga, $pasta.$miniatura_nova);
		
		
		
		###############  PASSO 4 - MOVE AS FOTOS PARA AS DEVIDAS PASTAS  ###############
		//4.1 Original
		$original = $nome.".".$extensao;
		rename($pasta.$original, $pasta_originais.$original);

		//4.2 Miniatura
		rename($pasta.$miniatura_nova, $pasta_thumbs.$miniatura_nova);
	}

	exit(0);

###############################################################
################### FIM DO PROCESSAMENTO ######################
###############################################################

/* Manipula a saída do erro. This error message will be sent to the uploadSuccess event handler.  The event handler
will have to check for any error messages and react as needed. */
function HandleError($message) {
	echo $message;
}
?>

 

PROBLEMA:

A imagem está sendo enviada normalmente e é transferida para a pasta "Temp", mas não está executando o restante, que seria executar os comandos da classe de manipulação. Alguém consegue inxergar o problema?

 

O problema que estou achando nesse swfupload é que não tem como verificar até onde o procedimento está indo realmente e o que está dando erro. Ele possui algum debugger ou algo do tipo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, achei aqui como ativar o sistema de debug do SWFUpload, agora eu consigo visualizar os erros dos PHP e assim poder solucionar os problemas. Vou tentar resolver os possíveis e qualquer coisa volto aqui para mostrar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para ativar o debug, bastava inserir:

// Debug Settings
		debug: false
	});
};
como true no final do script. (caso alguém pesquise esse topico).

 

Mas mesmo assim, os erros que acontecem no arquivo de upload, geralmente retornam como alert() qndo você tenta usar o swfupload..(pelo menos comigo é assim), já que o retorno esperado é um FILEID, e qualquer coisa diferente disso, é um erro pra ele.

 

Qual a dificuldade agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois que eu encontrei esse modo debug dele e ativei, eu consegui resolver os problemas do PHP.

 

Para mim não estava dando alert() nenhum. Estranho isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dae Diego, bza?

achei teu post estou com um problema de entendimento desde do swfupload. Talvez tu possa me ajudar.

Acontece que não consigo ver funcionar o upload.php.. por exemplo, se eu coloco um (print 'essa msg deve aparecer quando upload") nada acontece, mas o upload é feito... ai que vem o problema, porque preciso colocar código dentro desse arquivo, mas não entendi em que momento ele executa... pode me dar uma luz... vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chegou a ativar o modo "debug"? Pois quando você ativa isso, ele exibe as mensagens na textarea do DEBUG.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim.. mas não mostra o que houve no aruqivo upload.php... mostra assim:

 

 

---SWFUpload Instance Info---

Version: 2.2.0 2009-03-25

Movie Name: SWFUpload_0

Settings:

upload_url: /vca/upload.php

flash_url: swfupload/core/Flash/swfupload.swf?preventswfcaching=1268662871577

use_query_string: false

requeue_on_error: false

http_success:

assume_success_timeout: 0

file_post_name: uplfile

post_params: [object Object]

file_types: *.*

file_types_description: Todos os arquivos

file_size_limit: 10 MB

file_upload_limit: 100

file_queue_limit: 0

debug: true

prevent_swf_caching: true

button_placeholder_id: spanButtonPlaceHolder

button_placeholder: Not Set

button_image_url: /vca/swfupload/images/TestImageNoText_65x29.png

button_width: 65

button_height: 29

button_text: <span class="theFont">Procurar</span>

button_text_style: .theFont { font-size: 16; }

button_text_top_padding: 3

button_text_left_padding: 12

button_action: -110

button_disabled: false

custom_settings: [object Object]

Event Handlers:

swfupload_loaded_handler assigned: false

file_dialog_start_handler assigned: false

file_queued_handler assigned: true

file_queue_error_handler assigned: true

upload_start_handler assigned: true

upload_progress_handler assigned: true

upload_error_handler assigned: true

upload_success_handler assigned: true

upload_complete_handler assigned: true

debug_handler assigned: true

 

SWF DEBUG: SWFUpload Init Complete

SWF DEBUG:

SWF DEBUG: ----- SWF DEBUG OUTPUT ----

SWF DEBUG: Build Number: SWFUPLOAD 2.2.0

SWF DEBUG: movieName: SWFUpload_0

SWF DEBUG: Upload URL: /vca/upload.php

SWF DEBUG: File Types String: *.*

SWF DEBUG: Parsed File Types:

SWF DEBUG: HTTP Success: 0

SWF DEBUG: File Types Description: Todos os arquivos (*.*)

SWF DEBUG: File Size Limit: 10485760 bytes

SWF DEBUG: File Upload Limit: 100

SWF DEBUG: File Queue Limit: 100

SWF DEBUG: Post Params:

SWF DEBUG: id_pai=3

SWF DEBUG: ----- END SWF DEBUG OUTPUT ----

SWF DEBUG:

SWF DEBUG: Event: fileDialogStart : Browsing files. Multi Select. Allowed file types: *.*

SWF DEBUG: Select Handler: Received the files selected from the dialog. Processing the file list...

SWF DEBUG: Event: fileQueued : File ID: SWFUpload_0_0

SWF DEBUG: Event: fileDialogComplete : Finished processing selected files. Files selected: 1. Files Queued: 1

SWF DEBUG: StartUpload: First file in queue

SWF DEBUG: Event: uploadStart : File ID: SWFUpload_0_0

SWF DEBUG: Global Post Item: id_pai=3

SWF DEBUG: ReturnUploadStart(): File accepted by startUpload event and readied for upload. Starting upload to /vca/upload.php for File ID: SWFUpload_0_0

SWF DEBUG: Event: uploadProgress (OPEN): File ID: SWFUpload_0_0

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 65536. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 98304. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 131072. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 163840. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 327680. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 589824. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 655360. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 851968. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 1048576. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 1146880. Total: 1233172

SWF DEBUG: Event: uploadProgress: File ID: SWFUpload_0_0. Bytes: 1233172. Total: 1233172

SWF DEBUG: Event: uploadSuccess: File ID: SWFUpload_0_0 Response Received: true Data: 3<script>alert("ok");</script>entrou no método de inserir no banco

SWF DEBUG: Event: uploadComplete : Upload cycle complete.

 

vlw pelo retorno..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha aí a penultima linha:

SWF DEBUG: Event: uploadSuccess: File ID: SWFUpload_0_0 Response Received: true Data: 3<script>alert("ok");</script>entrou no método de inserir no banco

Não seria isso?

 

Tente dar um simples "echo".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi cara.. só mais uma duvida.. esta é a ultima mesmo..

 

o file_size_limit : "8 MB", declarei assim também.. porem tento fazer upload de um arquivo de 800kb e retorna este erro:

 

Allowed memory size of 8388608 bytes exhausted (tried to allocate 12288 bytes)

 

não entendi, pois não está considerando o tamanho proposto..

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Diego, estou tentando utilizar essa classe que você deixou a bastante tempo, devido estar enfrentando problemas, achei bastante interessante, pois é exatamente o que preciso, tentei reconfigurar com meus dados mas dá dando um erro, talvez possa me ajudar:

 

Warning: getimagesize(capadfgsdg.jpg) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 142

 

Warning: getimagesize(capadfgsdg.jpg) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 282

 

Warning: copy(capadfgsdg.jpg) [function.copy]: failed to open stream: No such file or directory in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 153

 

Warning: getimagesize(/galerias/) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 223

 

Warning: getimagesize(/galerias/) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 461

 

Warning: call_user_func() expects parameter 1 to be a valid callback, function 'imagecreatefrom' not found or invalid function name in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 243

 

Warning: imagecopyresampled() expects parameter 2 to be resource, null given in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 247

 

Warning: call_user_func() expects parameter 1 to be a valid callback, function 'image' not found or invalid function name in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 262

 

Warning: imagedestroy() expects parameter 1 to be resource, null given in C:\xampp\htdocs\www\upload\SWFUpload_v250_beta_3_samples\demos\applicationdemo\class.imghandler.php on line 265

Arquivo "capadfgsdg.jpg" não encontradoImagem gerada: /galerias/

Thumb gerado: \\galerias_thumb./galerias/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Diego, estou tentando utilizar essa classe que você deixou a bastante tempo, devido estar enfrentando problemas, achei bastante interessante, pois é exatamente o que preciso, tentei reconfigurar com meus dados mas dá dando um erro, talvez possa me ajudar:

...

 

Provavelmente todos os erros estão relacionados com a falha no upload. Verifique se o arquivo está realmente sendo enviado para que o código possa tratá-lo. ;)

 

Vai corrigindo o código desde o começo e testando parte por parte até o final.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.