Ir para conteúdo

POWERED BY:

Arquivado

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

InterPlanet

ER + preg_match()

Recommended Posts

Saudações turma! :rolleyes:

 

O problema desta vez é o seguinte:

 

Desenvolvi um script para geração de backup's com saída para arquivos .sql. Tudo bem, ja esta pronto e todo revisado.

 

Agora, estou desenvolvendo a restauração de backup's através da leitura do arquivo, identificação das instruções e consequente execução. Claro, o modo mais prático (pelo menos até onde vai meu conhecimento) de identificar estas instruções é lendo o arquivo para uma string (file()) e usando ER + preg_match_all().

 

Ai é que entra o meu problema pois na geração a quebra de linha na estrutura (obtida com SHOW CREATE TABLE) e nos insert's.

 

Exemplo de arquivo gerado pelo meu script:

 

# 
# IPis® - http://www.ipis.com.br
# Script by Fernando Lima (info@ipis.com.br)
# 
# IP.Base v3.0.3.0 (192.168.10.15) - Demonstração
# Sistema de Backup's
# 31/05/2012 - 10:44:35
# 
# Backup (Manual) da base BASE_V3_0 executado por Fernando Lima
# 

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";


# ----------------------------------
# Tabela SIS_ACOES
# ----------------------------------

# Estrutura:

DROP TABLE IF EXISTS `sis_acoes`;
CREATE TABLE `sis_acoes` (
 `Codigo` mediumint(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
 `Fonte` tinytext COLLATE utf8_unicode_ci,
 `Tipo` tinytext COLLATE utf8_unicode_ci,
 `Chave` tinytext COLLATE utf8_unicode_ci,
 `Acao` tinytext COLLATE utf8_unicode_ci,
 `Nome` tinytext COLLATE utf8_unicode_ci,
 `Modulo` tinytext COLLATE utf8_unicode_ci,
 `Permissao` tinytext COLLATE utf8_unicode_ci,
 `Regra` tinytext COLLATE utf8_unicode_ci,
 `Regra_Nivel` tinytext COLLATE utf8_unicode_ci,
 `Regra_Usuario` tinytext COLLATE utf8_unicode_ci,
 `Regra_ID` tinytext COLLATE utf8_unicode_ci,
 `Regra_Especial` tinytext COLLATE utf8_unicode_ci,
 `Reg_CadData` date DEFAULT NULL,
 `Reg_CadHora` time NOT NULL DEFAULT '00:00:00',
 `Reg_CadUsuario` tinytext COLLATE utf8_unicode_ci,
 `Reg_AtuData` date DEFAULT NULL,
 `Reg_AtuHora` time NOT NULL DEFAULT '00:00:00',
 `Reg_AtuUsuario` tinytext COLLATE utf8_unicode_ci,
 `Pesquisa` tinyint(2) NOT NULL DEFAULT '0',
 `Filtro` tinyint(1) NOT NULL DEFAULT '0',
 PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

# Registros: 61

INSERT INTO `sis_acoes` VALUES 
(00001, "Sistema", "Chave", "bHJobGZ8ZnxmfEZ1c2lrdUpvTiRuOmg=", 0001, "Indexação", "Sistema", "cG5mWG5sbmxYc21hdURtTg==", "dnBmZnZscGZmUGlURFdtbQ==", "dmZmWG5obGZmTG9zeVRlTA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00002, "Sistema", "Chave", "cnRYanJuZnxmfFpNVTNHUWd8RnVzaXVxSGdMJG46cFg=", 0002, "Página inicial", "Sistema", "aHJyWGZqaHBYYUNUbUNUeQ==", "cm5qdnJycmhmZXFvYlBUUg==", "dHJ0WGhsdnJmelJDRk5pRA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00003, "Sistema", "Chave", "bHRYbmZ8ZnxLNDR1OlpNVTNHUWd8RnVzZU55JHQ6ZnY=", 0003, "Erros do sistema", "Sistema", "dmh2WHZsbm5YZ3lxV0pMYg==", "bG52bHJwam5maVdScWViZQ==", "aHJ0bmpsWFhmRmdWTFJKZw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00004, "Sistema", "Chave", "dm52ZnxLMDZxfFpNVTNHUWd8RnVzeWdhV2UkcDpqWA==", 0004, "Informações do sistema", "Sistema", "WHBYZnRmdHJYUlZieVBtUA==", "blhYcHJ2bGhYVmlDTE5IYQ==", "cnRYWGpwbmh2a0ZWRkZSSg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00005, "Sistema", "Chave", "bnZ2dmZ0ZnxHSzM2VU1FeEtWfFpNVTNHUWd8RnVzSEZzb21UYSRsOnJ2", 0005, "Documentos do sistema", "Sistema", "bG50ZmhYZmpYZVBhZ1BMYQ==", "dFhucHJuaGpYZ3VlZ1RIeg==", "bGhmbHR2dHRYV216RkptRg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00006, "Sistema", "Chave", "cGxybnZybGZ8Znw1OTUuR1FHfHN6SnFWRnlzJHA6cFg=", 0006, "Execuções do sistema", "Sistema", "bm5mbGxYbnBYcVZndWJiRg==", "Zm5ucFhYbHJmZ21KRmJ1eQ==", "dmhwaFhodHBmcW1DSnVMUA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00007, "Sistema", "Chave", "aHJqWGZxTHF8Znw1OTUuR1FHfHN6SlJEcXplYmIkbDpsWA==", 0007, "Iniciar o sistema", "Sistema", "bGZ2bmx0blhYVmFxUGl6RA==", "aHRmdnJodGhmZWdpZ0NWZw==", "cnRobmxqcFhmekZ5ZTFlSA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00008, "Sistema", "Chave", "aG5qWHRsNFFaZ3xmfDU5NS5HUUd8c3pKRHVUUCRyOmpY", 0008, "Finalizar o sistema", "Sistema", "ampsbnB0aGpYYUZQbUxEYQ==", "cGhqWHRYZlhmQ2FtbWJvaQ==", "bmZucHJscG5mVE5SczFETg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00009, "Sistema", "Chave", "cHBYZnZoaGowMEtTS058Znw1OTUuR1FHfHN6Sm9Uem9iRG1OcSRoOmZ2", 0009, "Encerramento da sessão", "Sistema", "WGZodFhwdHJYTG1vUk5KdQ==", "bnByWHJocmZmbW91ZUphVg==", "bnBmcnBoalhmenphZUN1eg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00010, "Sistema", "Chave", "am5qaHRubGx0NFpHUUVJR1VKOktaeFpBUTdaRTN6fGZ8NTk1LkdRR3xzekp5SlREelRESFIkaDpwdA==", 0010, "Pesquisa de atualização", "Sistema", "WGpsbG52dnZYTmtGYWkxQw==", "WFhubm5mWHRYTkpQUEpGeQ==", "dFhwaGh2bG5YdXFXdURxeg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00011, "Sistema", "Chave", "dG5mfGZ8NTk1LndaSzc2ZEt3fHN6Sm1DZUpWSG8kbDpmdg==", 0011, "PopUP Downloads", "Sistema", "ZlhyZnJqblhYUkZzc0xhVw==", "dHZsZmh0bnBYeTFibzFtSg==", "blhuanR2dGxYVHNzSFdiRA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00012, "Sistema", "Chave", "aGpqampmdm5wZnxmfDU5NS5LUTRLM1o3VTR8c3pKaUZSVldSMVBXJGg6WHY=", 0012, "PopUP Relatórios", "Sistema", "cGZYbHBsdmhYRFBXeWkxRg==", "bGx0bHZscGxYSmVrZ0h6VA==", "bG5ybGZ0bHZYRGVQb3VIVA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00013, "Sistema", "Chave", "aHBmbGxYdnJmfGZ8NTk1LlNLN3xzekpvVGdpV3VQeiRqOnBY", 0013, "PopUP Logs", "Sistema", "cG5ybm52bGZYYWJQbWVhUg==", "bmhYaGZYdGZYekZiTkhOMQ==", "WHZ0bGhubnJYQ2F6dWVhVg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00014, "Sistema", "Chave", "cHRmfGZ8R1VLeFo0RVNRMDZLVzpaTVUzR1FnfEZ1c3UkWDpodg==", 0101, "Listar Configurações", "Configurações", "WHJubmZobnZYRHVpdUhKaQ==", "am5sbFhobmhYRldSVEN1Rg==", "ZmZmZlhqdHR2eUZOSEhlVg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00015, "Sistema", "Chave", "cjRaMlo0c3xmfEdVS3haNEVTUTA2S1c6Wk1VM0dRZ3xGdXN1SFAkdDpydA==", 0102, "Atualizar Configuração", "Configurações", "WG5yampoalhYTG9iYlZtTA==", "ZmZycnRqaHBYSkNGYVBIVw==", "cnRYWHZydmx2SkZiZ1ZMZw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00016, "Sistema", "Chave", "dmZ8Znw1RU94Wnk6Wk1VM0dRZ3xGdXNhTGFpMSRwOnZ2", 0201, "Listar Backups", "Backup", "clhqWHJsam5YTnptemdtMQ==", "dHBuZmZYamxYYnNXSHFhaQ==", "anJ0ZnJsdGhYTExxRnliVg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00017, "Sistema", "Chave", "cGZmNFozeFo1TUtXfGZ8NUVPeFp5OlpNVTNHUWd8RnVzUmdlV3l5JG46ZnQ=", 0202, "Compactar Backup", "Backup", "ZnRycmpyZmZYdXlMSHFpZw==", "bmZqbm5manJYa0hUekRiVA==", "WG52cmZyZlhycVdtSnVIcw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00018, "Sistema", "Chave", "dDRaM3haNU1LVy1aNzVRMzdFbXxmfDVFT3haeTpaTVUzR1FnfEZ1c0gkWDpodA==", 0203, "Compactar múltiplos Backups", "Backup", "WHZybGpyamhYYURDb3FpYg==", "WGZqdHJqbHRYRGlhMW0xbQ==", "bHRYWHJucGZyTHpEV05KVA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00019, "Sistema", "Chave", "cHJwcGZyNFozeFo1TUt4R1VWfGZ8NUVPeFp5OlpNVTNHUWd8RnVzSHkkdjp0dA==", 0204, "Descompactar Backup", "Backup", "WHBwbnJ0bGxYTExQcUppTg==", "bGhuWG5sdGZYb0RDZ29zTg==", "amhucGxsbHRyRkZKZWF1YQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00020, "Sistema", "Chave", "clh0dHZwamZuNFozeFo1TUt4R1VWLVo3NVEzN0VtfGZ8NUVPeFp5OlpNVTNHUWd8RnVzSG9WYnVGZ2d5JGg6dnI=", 0205, "Descompactar múltiplos Backups", "Backup", "dGpsWHBsWG5YekRrekxOUg==", "bnRyanRqcGhYVGVQb21OeQ==", "aHZwbFh0bGpyVnVpVFRIbQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00021, "Sistema", "Chave", "bGZYdG40UUU3eGN1fGZ8NUVPeFp5OlpNVTNHUWd8RnVzTnNITFJvJG46anY=", 0206, "Excluir Backup", "Backup", "cGhsbmZYWGpYbUNURkhMTA==", "bGZobnJybGZYb0R1bXMxaw==", "dnJ0ZmZ0WGpwUmVvTkp5Sg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00022, "Sistema", "Chave", "dmZuanRuNFFFN3hjdS1aNzVRMzdFbXxmfDVFT3haeTpaTVUzR1FnfEZ1c29XaVJSJHA6bHQ=", 0207, "Excluir múltiplos Backups", "Backup", "dG5YamxucHZYelRrVFRXdQ==", "cmZ2bGhuamxYQ28xeXpXQw==", "cHBucmhoanZwQ0xndXliYQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00023, "Sistema", "Chave", "bmh0WHRmfDRaM0V4VWN1fDVFT3haeTpaTVUzR1FnfEZ1c1RxMVZUTHVMYSRoOmh2", 0208, "Execução de Backups", "Backup", "dmpmanJoWHBYZ0pXcUxxVg==", "dnZyaGZubHZYZUNKemF5cQ==", "cGZocGhwbGpyQ2FhemdKaw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00024, "Sistema", "Chave", "dmxYcjRaNFo1VTRKfDRaM0V4VWN1fDVFT3haeTpaTVUzR1FnfEZ1c295bWUkcjpudA==", 0209, "Preparar execução de Backups", "Backup", "cnBodGZYaGZYbXVEcXExeg==", "dm5sWGhmdnJYYUhUTkp6Rg==", "dHBwcm50WGhySmtiYWl1eQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00025, "Sistema", "Chave", "dm50bFhqZnw0WjRFWjNHVUh8NUVPeFp5OlpNVTNHUWd8RnVzbSRYOmZ0", 0210, "Restauração de Backups", "Backup", "bG5oaG5obFhmVENSZzFtRg==", "cnJwZnZqcFh2aW9pRkp1Zw==", "dmxocGpmWGpuRHF1SG1Qeg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00026, "Sistema", "Chave", "bHBqbmp2NFo0WjVVNEp8NFo0RVozR1VIfDVFT3haeTpaTVUzR1FnfEZ1c0pnVGdKUnEkbDpsdA==", 0211, "Preparar restauração de Backups", "Backup", "bGZ2bHJsbGpmRGdrb0ZQbQ==", "dmxobHJYbmZ2SG9nc0x6TA==", "ZnRYcGhYam5ueVJEdTFiTA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00027, "Sistema", "Chave", "cnZwcGY0WjNFeFVjdTo1RU94Wnl8Znw1OTUuR1FHfHN6SlJWV0Mkcjpodg==", 0212, "Executar Backup", "Backup", "dnRqZnRqbGhYREpzekhWVg==", "dmZ2WGpucHRYZ3NDc3VpTg==", "WG5YcmpqcmxyV2JiZ05WQw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00028, "Sistema", "Chave", "amp2bmxuNFo0RVozR1VIOjVFT3haeXxmfDU5NS5HUUd8c3pKeSRYOmZ0", 0213, "Restaurar Backup", "Backup", "dGxwWFhsampmYXFzb20xVA==", "cnBYZnBYcGx2VG9ETkhrQw==", "cHB2WFh0dnZuSEZnVm1ERg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00029, "Sistema", "Chave", "bnBmWDVFT3haeTp3Wks3NmRLVnxmfDU5NS5HUUd8c3pKcWFlYSRyOmh2", 0214, "Baixar arquivo de Backup", "Backup", "WHJodHZmbGZYSmdQZU5neg==", "aHRuamxuaGhYYmdnTkNIYg==", "WHRYZnJscHZwTGJ1aVJ6Qw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00030, "Sistema", "Chave", "dHR2aHR0dGxmfGZ8R1NLTjpaTVUzR1FnfEZ1c0xpYjFhRCRuOmZ2", 0301, "Listar Logs", "Logs", "bmZyWGpydnBYbUQxbUZhcQ==", "cHBqWG5qbGxYZ05hUG91Vw==", "dm52WHBydHRYa0xEenlSUA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00031, "Sistema", "Chave", "dHZqdG50NFozeFo1TUtXfGZ8R1NLTjpaTVUzR1FnfEZ1c3NhdUN5YW8kbDpqdg==", 0302, "Compactar Log", "Logs", "Zmx2dm5ucHJYcTF1V2VnbQ==", "anZ0dnJyanRYdVBnTFBxYQ==", "dGp2aGh2WG5yaWVKZ2VpRg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00032, "Sistema", "Chave", "WGZwanRmdGY0WjN4WjVNS1ctWjc1UTM3RW18ZnxHU0tOOlpNVTNHUWd8RnVzRHNSJHQ6bHQ=", 0303, "Compactar múltiplos Logs", "Logs", "bGp0dHB0bG5YTkRpREwxSg==", "WGxyZmpqWG5Yb0RKZW9SeQ==", "aGpsbHRycGhyMUpWUHFneg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00033, "Sistema", "Chave", "WHRodGxqNFozeFo1TUt4R1VWfGZ8R1NLTjpaTVUzR1FnfEZ1c2VIeTEkcjpYdA==", 0304, "Descompactar Log", "Logs", "ZmhqcHZYbnRYVlBpeW9tdQ==", "cHZmaGpmcmhYTkRiVHF5cw==", "bnBqcGhqcmZyYWdzUk5GbQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00034, "Sistema", "Chave", "dnBuNFozeFo1TUt4R1VWLVo3NVEzN0VtfGZ8R1NLTjpaTVUzR1FnfEZ1c1dSbXFza0okbDpmcg==", 0305, "Descompactar múltiplos Logs", "Logs", "bm5YdmxocnBYZ05remViUA==", "dG52Zm5udHZYemJQMXNSYQ==", "bnRYcGhwZnZyMUhDZXFzVw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00035, "Sistema", "Chave", "cnZ2NFFFN3hjdXxmfEdTS046Wk1VM0dRZ3xGdXNtYmlrTmIxJGw6bnY=", 0306, "Excluir Log", "Logs", "dGpmblh2cG5mVnplc1JWaQ==", "bHJydGxsaGx2bWltUmJhMQ==", "cGxwWFh0aHZudVJUSkxMeg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00036, "Sistema", "Chave", "aGxwcmxudmw0UUU3eGN1LVo3NVEzN0VtfGZ8R1NLTjpaTVUzR1FnfEZ1c21OTkhWV1JUViRoOnB0", 0307, "Excluir múltiplos Logs", "Logs", "bHJmdmp0bnJmazFOSHpOUg==", "bnRyalhuZmZYRlZSQ2ltQw==", "clhoamhqZmhua21ISGJEcw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00037, "Sistema", "Chave", "cHJudnJmfDRVRHxHU0tOOlpNVTNHUWd8RnVzazFzJHQ6dnY=", 0308, "Visualização de Logs", "Logs", "dHBudnZyZm5YVHVtYm9tRg==", "WHBoanB0bnBYaW9iZVRIbQ==", "WG52am5oWGp2MTF5VkZDaw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00038, "Sistema", "Chave", "Zmo0UU1RNDVNcXxmfDU5NS5TSzd8c3pKcTFGVyRyOnZ2", 0309, "Imprimir registro de Log", "Logs", "bGZuWGZmcnZYUm1QVkNWZw==", "anZyanZYZmhYa1dIdU5xZw==", "WGpYam50cHByeVJhVkh6Sg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00039, "Sistema", "Chave", "dnZmU0tOOndaSzc2ZEtWfGZ8NTk1LkdRR3xzekpWRjFvJHI6bnY=", 0310, "Baixar arquivo de Log", "Logs", "bmpocnB0dmpYVm8xRmVxeQ==", "bFhYZnJoWHJYelZ6SERKMQ==", "anZ2WGx0amxwREhSYVdvcw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00040, "Sistema", "Chave", "WHRydHBmfGZ8R1VLR0dRTTRVSjpaTVUzR1FnfEZ1c2JpaUhKZ1ckbDpudg==", 0401, "Listar Permissões", "Permissões", "dlhYcnJwaG5YYXpDVkRhSg==", "bGpucm5wcmpYTkNveWtxRA==", "dGhwdnBodGpYZzFxaW9UZw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00041, "Sistema", "Chave", "dmhYclh0bjRRRTd4Y3V8ZnxHVUtHR1FNNFVKOlpNVTNHUWd8RnVzdURSRiRyOnZ0", 0402, "Excluir Permissão", "Permissões", "cGZYcmhwWFhYSlZQYkhrSA==", "bnJsdG5sbm5YaUptMXFiRg==", "dGZwZnJuWGpwTnpicXFnSg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00042, "Sistema", "Chave", "cGw0UUU3eGN1LVo3NVEzN0VtfGZ8R1VLR0dRTTRVSjpaTVUzR1FnfEZ1c2EkWDpYcg==", 0403, "Excluir múltiplos Permissões", "Permissões", "dGZuWGx2cG5mdXkxQ0NMRA==", "cmxoanJycmZYYnlrQ2Jreg==", "WHJwcHZyaHZuTGJtb1ZIYQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00043, "Sistema", "Chave", "bGpsaFh0Zm5mfEsyS0x8R1VLR0dRTTRVSjpaTVUzR1FnfEZ1c2trZyR0Omh2", 0404, "Cadastro de Permissão", "Permissões", "dlhYdHBoclhYREhrazFIRg==", "anRYZnJqcmhYYW1QYWlKRA==", "bnRqbGpsaHBybUpvUnpDaw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00044, "Sistema", "Chave", "cmZuNFp3UTdaRHxLMktMfEdVS0dHUU00VUo6Wk1VM0dRZ3xGdXNKUnVIeTFnJGw6cHQ=", 0405, "Cadastrar registro de Permissão", "Permissões", "dnR2anJ0bG5YMUhDV1dXRg==", "anJYWGxuampYbVRKc2ltSg==", "anB2cFhsalhyRnUxTDFQbQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00045, "Sistema", "Chave", "bGZ8NFozUXd1fEdVS0dHUU00VUo6Wk1VM0dRZ3xGdXNnSCR2Olh0", 0406, "Edição de Permissão", "Permissões", "aG5qdHJmamxYTldGaUxDYQ==", "dmh0dHBodnJYV2lhTEhrUg==", "ZnZydnJmWG5wbXVna0pUaw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00046, "Sistema", "Chave", "dnY0WndRN1pEfDRaM1F3dXxHVUtHR1FNNFVKOlpNVTNHUWd8RnVzTFZtQyRyOmx0", 0407, "Editar registro de Permissão", "Permissões", "ZmpwWGZqZmZYMWd6TnNMQw==", "bmxwZm50ZnJYVDExRkhIeQ==", "ZnJ0WHRmamhwQ0RpTHpEZQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00047, "Sistema", "Chave", "ZnRqaHZqZmZmfDRaQVE3WkUzenxHVUtHR1FNNFVKOlpNVTNHUWd8RnVzMXNEV3prUCRsOnJ0", 0408, "Atualização de Permissões", "Permissões", "bGxoWGhoWGZYeVdvb2tUZQ==", "ZnZqbmpmcnZYTlJvZzF6Sg==", "aFhobmpmbnZwa3VtTFZxcQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00048, "Sistema", "Chave", "ajRaM0V4VWN1fDRaQVE3WkUzenxHVUtHR1FNNFVKOlpNVTNHUWd8RnVzTFZKZVZ5UmIkajpYcg==", 0409, "Definir Atualização de Permissões", "Permissões", "cHZmbGxuanJYSFdiVERMbQ==", "cnRudnZyanBYRFJ6UnFiMQ==", "aHZ0bGhycmZwYUxQV1RWVA==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00049, "Sistema", "Chave", "ZmxmakdVS0dHUU00VUp8Znw1OTUuR1FHfHN6SmkxJHY6cnY=", 0410, "Executar Atualização de Permissões", "Permissões", "bnRwdHRsdGhYSld1c3FvSA==", "WHZYdm5odm5Yb2lvUExEbw==", "amp0cGZqcnRweW9pZ05WcQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00050, "Sistema", "Chave", "cGpoamZ8SzQ0dXxHVUtHR1FNNFVKOlpNVTNHUWd8RnVzc1ZhTFRnJG46aHY=", 0411, "Visualizar Erro de Permissões", "Permissões", "dlhobGhqdGZYaWVIbVBnSA==", "ZnBmcmxqZnRmSlJ5RlJDaQ==", "anRqaHJwclhmTEpieVZXQw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00051, "Sistema", "Chave", "ZnJodGZ8ZnxHS1E0WkVHZTpaTVUzR1FnfEZ1c1ZhV215MSRuOnJ2", 0501, "Listar Usuários", "Usuários", "aGx0bG5qdGhYTFJ6Rml5Ug==", "amZsZm5scnJYYVdURFZDRA==", "cnRyWHJYbGZYMVJ6eUhIZQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00052, "Sistema", "Chave", "bnZqbnJyaFg0UUU3eGN1fGZ8R0tRNFpFR2U6Wk1VM0dRZ3xGdXNnaVYkdDpmdA==", 0502, "Excluir Usuário", "Usuários", "dGxoWG5YdHRmYkhhVmtKMQ==", "bmx2bmZyanJ0ZXNxb29zQw==", "aGx2cnJYZmZyekRhZUphZw==", "", "VnFF", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00053, "Sistema", "Chave", "cnB2aDRaMlEzenxmfEdLUTRaRUdlOlpNVTNHUWd8RnVzc0hzRkNicyRsOmh2", 0503, "Ativar Usuário", "Usuários", "cHZmbGhqdnRmVkZ6ZUhtSA==", "ZnJ2WHJocHR0b2FhQ0plVw==", "aGpsdnJ2cGpydVJMeUpxbQ==", "", "VnFF", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00054, "Sistema", "Chave", "bmw0WjJRM1pHVVZ8ZnxHS1E0WkVHZTpaTVUzR1FnfEZ1c0pIaUNWVk4kbDp2dA==", 0504, "Desativar Usuário", "Usuários", "aHR2WHZmcnBmUHVGa0NMaw==", "dGZsdnB0cHZ0TEZxTldOSg==", "WHJsdGZYZmxyYVRtenpWeg==", "", "VnFF", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00055, "Sistema", "Chave", "dFhoNFFFN3hjdS1aNzVRMzdFbXxmfEdLUTRaRUdlOlpNVTNHUWd8RnVzcXNXJHQ6aHQ=", 0505, "Excluir múltiplos Usuários", "Usuários", "dmhqdGhYaHJmVGVMTFIxRg==", "cmpYdFhwaGZ2c3lIV0hpeQ==", "WHB2WGhuZlhuYkxOTlAxbw==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00056, "Sistema", "Chave", "ZnI0WjJRM3otWjc1UTM3RW18ZnxHS1E0WkVHZTpaTVUzR1FnfEZ1czFhSCR0Omp0", 0506, "Ativar múltiplos Usuários", "Usuários", "aGp0dmZsbGxYRlZWaVdKVg==", "cnBqcnBsbmpYeVRlc05nbw==", "bnBmamZ0cGhwVnVtZUpvVg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00057, "Sistema", "Chave", "bG5qamhsam40WjJRM1pHVVYtWjc1UTM3RW18ZnxHS1E0WkVHZTpaTVUzR1FnfEZ1c1ZDJHY6WHI=", 0507, "Desativar múltiplos Usuários", "Usuários", "bGxucHB2anJYSlRnSkxpSA==", "dnJobmxudGxYdVJvZ1BiZw==", "dnZqdGpubm5wRHpXdUh5bQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00058, "Sistema", "Chave", "bGZ8SzJLTHxHS1E0WkVHZTpaTVUzR1FnfEZ1c0NlYSR0Omx2", 0508, "Cadastro de Usuário", "Usuários", "ZnBqdmhocnRYeUxzc0RxbQ==", "blhYdm50ZmpYSFRKTGVlaw==", "aGpmdHZobHRyTGlEc2JKdQ==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00059, "Sistema", "Chave", "Zmx0WHJsNFp3UTdaRHxLMktMfEdLUTRaRUdlOlpNVTNHUWd8RnVzYkNQJHQ6dHQ=", 0509, "Cadastrar registro de Usuário", "Usuários", "amhYanZmanRYSFBhdWthMQ==", "aHJmdHRyZmZYMW9SSkpvTg==", "WGZmbmZmcGhydVdUdWV6eg==", "", "", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00060, "Sistema", "Chave", "aHJYZnR2Znw0WjNRd3V8R0tRNFpFR2U6Wk1VM0dRZ3xGdXNOZ2FlUiRwOmh2", 0510, "Edição de Usuário", "Usuários", "bnBsdGxqdnZmekRITlRpUg==", "WHBscGpsbGhweVZDa3p1cw==", "dG5ucGxYbnJmSGVSV2lOSA==", "", "VnFF", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0),
(00061, "Sistema", "Chave", "aHRmWGh0NFp3UTdaRHw0WjNRd3V8R0tRNFpFR2U6Wk1VM0dRZ3xGdXNzVnFWcUNnaUokaDpwdA==", 0511, "Editar registro de Usuário", "Usuários", "dGpoZnBobmZmeWFGb1BlcQ==", "WFhqdHRoWGpwUm1pSmJidQ==", "bnJsbmZyamZma0pOelBpbQ==", "", "VnFF", "", "2012-05-31", "10:25:27", "Wk1VM0dRZw==", "", "00:00:00", "", 0, 0);

Funções usadas na leitura:

 

<?php
/*** LEITURA DO ARQUIVO ***/
Function Arquivo_Ler($Arquivo = '', $Array = True, $Linhas_Vazias = True) { Global $_SIS;

$Arquivo_URL       = $_SIS['Base'].$Arquivo;
If (empty($Arquivo)) Return Array('RT' => 'Erro', 'Info' => 'Parâmetro ausente/incorreto: Arquivo (URL)');
If (!is_file($Arquivo_URL)) Return Array('RT' => 'Erro', 'Info' => 'Arquivo [ '.$Arquivo.' ] não encontrado');
If (!is_readable($Arquivo_URL)) Return Array('RT' => 'Erro', 'Info' => 'Arquivo [ '.$Arquivo.' ] sem permissão de leitura');

$RT                = $Array ? ( $Linhas_Vazias ? file($Arquivo_URL) : file($Arquivo_URL, FILE_IGNORE_NEW_LINES) ) : file_get_contents($Arquivo_URL);
Return $RT;
}

/*** IDENTIFICACAO DAS INSTRUCOES ***/
Function Backup_Ler_Arquivo($Arquivo) {

$Conteudo          = Arquivo_Ler($Arquivo, False, False);
//$Conteudo          = str_replace('`', '', $Conteudo);
$Conteudo          = addslashes($Conteudo);

// Conteudo
$TMP               = preg_match_all("/DROP TABLE.*;/i", $Conteudo, $aDrop);
$TMP               = preg_match_all("/CREATE TABLE.*;/i", $Conteudo, $aCreate);
$TMP               = preg_match_all("/INSERT INTO.*;/i", $Conteudo, $aInsert);

$RT                = Array('Drop' => $aDrop[0], 'Create' => $aCreate[0], 'Insert' => $aInsert[0]);
Return $RT;
}
?>

Beleza! O problema, acredito, é que:

Como as instruções CREATE TABLE e INSERT INTO tem quebras de linha, ao contrário da DROP TABLE que é sempre gerada em uma única linha, não as consigo capturar.

 

print_r() da saída da minha função Backup_Ler_Arquivo():

 

<?php
Array
(
   [Drop] => Array
       (
           [0] => DROP TABLE IF EXISTS sis_acoes;
       )

   [Create] => Array
       (
       )

   [insert] => Array
       (
       )

)
?>

 

Detalhe:

Se removo o ; no fim da ER ele retona apenas a 1ª linha:

 

// ASSIM: (sem ;)
$TMP               = preg_match_all("/DROP TABLE.*;/i", $Conteudo, $aDrop);
$TMP               = preg_match_all("/CREATE TABLE.*/i", $Conteudo, $aCreate);
$TMP               = preg_match_all("/INSERT INTO.*/i", $Conteudo, $aInsert);

// Imprime:
Array
(
   [Drop] => Array
       (
           [0] => DROP TABLE IF EXISTS `sis_acoes`;
       )

   [Create] => Array
       (
           [0] => CREATE TABLE `sis_acoes` (
       )

   [insert] => Array
       (
           [0] => INSERT INTO `sis_acoes` VALUES 
       )

)
?>

Por isso acredito que o problema sejam as quebras de linhas ou, de repente, os parenteses contidos nas intruções... :D Alguma luz parceiros?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao que parece, você precisa do modificador m e/ou s além desse seu i, assim o casamento guloso (.*) considerará novas linhas como parte da string anteriormente casada, meio que concatenando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aewwwwww @Bruno, sempre me salvando! THKS!

 

Solução:

 

<?php
/*** IDENTIFICACAO DAS INSTRUCOES ***/
Function Backup_Ler_Arquivo($Arquivo) {

$Conteudo          = Arquivo_Ler($Arquivo, False, False);
//$Conteudo          = str_replace('`', '', $Conteudo);
$Conteudo          = addslashes($Conteudo);

// Conteudo
$TMP               = preg_match_all("/DROP TABLE.*;/si", $Conteudo, $aDrop);
$TMP               = preg_match_all("/CREATE TABLE.*;/si", $Conteudo, $aCreate);
$TMP               = preg_match_all("/INSERT INTO.*;/si", $Conteudo, $aInsert);

$RT                = Array('Drop' => $aDrop[0], 'Create' => $aCreate[0], 'Insert' => $aInsert[0]);
Return $RT;
}
?>

 

O acréscimo de s (/si) resolveu o pro!

Agora me diz, se não for pedir d+ hehe, onde posso ler mais sobre estes modificadores, é uma das partes que não estudei a fundo das ER.

 

Mais uma vez obrigado, deu alguns problemas aqui com o conteudo capturado mas eu sie como resolver, pode marcar como resolvido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A expressão regular correta, seria assim:

'((CREATE[ ]+TABLE)[^;]*)'

 

É extremamente desaconselhável o uso de .*, pois ele é burro. O motivo é bem explicado nesse tópico: Evite o Curinga e Quantificadores Gulosos

 

Para o seu caso, sugeriria o uso do padrão Interpreter, que acredito se adequar bem ao seu problema:

Interpreter

 

Mas é apenas uma sugestão de estudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza @Gabriel!

 

Na verdade ainda esta bem no comeco essa funcao, tem muito a ser acrescentado e melhorado.

Usei o coringa para expor de maneira mais rapida e simples o meu problema com as quebras de linha mas eu vou aprimorar a ER e, claro, vou ler sua sugestão pra verificar a viabilidade de aplicá-la no meu codigo.

 

Obrigado! ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Modificadores PCRE

 

Lembre-se que modificadores PCRE não são expressões regulares. Logo, uma expressão que necessita de um modificador de linguagem, não é uma ER 100% correta. É extremamente útil o uso dos modificadores, pois abrange à novas possibilidades em que a ER não atende. Mas quando for possível utilizar somente ER, use-a.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sempre quis aprender a usar o Interpreter.

 

Ele até parece fácil se você montar a estrutura a ser interpretada manualmente, como no exemplo do link.

 

Mas, assim como MUITOS dos Design Patterns, eu nunca vi um exemplo prático da coisa, ou seja, uma estrutura Interpreter que recebesse uma string multilinha como o desse tópico e Interpretasse cada token ou cada "sentença léxica", retornando o mesmo que obtido, de forma N vezes mais fácil, com Expressões Regulares.

Compartilhar este post


Link para o post
Compartilhar em outros sites
de forma N vezes mais fácil

Realmente, os Design Patterns não foram desenvolvidos para ser mais fácil, mais elegante ou mais rápido que uma solução convencional. Eu sempre vi que um problema possui N soluções. A diferença é que tento verificar qual é melhor, qual será melhor para possíveis manutenções e qual, um futuro desenvolvedor, será compreendida melhor.

 

OO também segue o mesmo exemplo. Programação procedural é N vezes mais fácil aprender. Mas mesmo assim. OO tem suas enormes vantagens, como desvantagens. Programação procedural também, são paradigmas diferentes. Entretanto, preferencia mundial é OO.

 

A maior vantagem, que eu, vejo, em utilizar DP, é que é um padrão bem documentado. Aqui, na Índia ou qualquer lugar do mundo, o padrão é o mesmo. Se um desenvolvedor utilizar um DP, outro que os conhecer, saberá como funciona. No PHP é menos (muuuuuuito menos) comum o uso dos padrões. Onde eu trabalho, ninguém sabia (pelo menos ninguém se manifestou do contrário) da sua existência até eu falar. Em outras linguagens, é mais frequente o uso. Mas mesmo assim, não tão frequente.

 

Mas veja bem o motivo da existência dos DP: "Soluções reutilizáveis para problemas conhecidos".

E nisso que é o ponto forte em utilizar DP. Pode não ser o mais fácil, mais rápido, ou mais utilizado. O mais importante, é saber que existe, saber como utilizar e, após tudo isso, saber como e quando utilizar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu achei super interessante a classe apesar de não ter lido tudo por pura falta de tempo, todavia já favoritei pra estudar no fds.

 

A primeira impressão que tive é que é o uso demasiado de processamento e perda de tempo não compensam usá-la (reitero: não li todo o tópico e funções ainda) para aplicações cotidianas tendo em vista que há soluções mais "práticas".

 

Claro, isto pode mudar após a leitura e completo entendimento dos objetivos.

 

Voltando ao tópico, segue a finalização da minha função para que, se puderem, me sugiram melhorias:

 

Exemplo de arquivo gerado pelo backup:

# 
# IPis® - http://www.ipis.com.br
# Script by Fernando Lima (info@ipis.com.br)
# 
# IP.Base v3.0.3.0 (192.168.10.15) - Demonstração
# Sistema de Backup's
# 31/05/2012 - 19:28:38
# 
# Backup (Manual) da base BASE_V3_0 executado por Fernando Lima
# 

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";



# ----------------------------------
# CLIENTES Inicio 
# ----------------------------------

# Estrutura:

DROP TABLE IF EXISTS `clientes`;
CREATE TABLE `clientes` (
 `Codigo` mediumint(5) unsigned zerofill NOT NULL,
 PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

# Registros: 0

# ----------------------------------
# CLIENTES Fim
# ----------------------------------


# ----------------------------------
# SIS_BACKUP Inicio 
# ----------------------------------

# Estrutura:

DROP TABLE IF EXISTS `sis_backup`;
CREATE TABLE `sis_backup` (
 `Codigo` mediumint(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
 `Alvo` tinytext COLLATE utf8_unicode_ci,
 `Tipo` tinytext COLLATE utf8_unicode_ci,
 `Base` tinytext COLLATE utf8_unicode_ci,
 `Base_Tabelas` longtext COLLATE utf8_unicode_ci,
 `Base_Servidor` tinytext COLLATE utf8_unicode_ci,
 `Diretorio` tinytext COLLATE utf8_unicode_ci,
 `Arquivo` tinytext COLLATE utf8_unicode_ci,
 `Arquivo_URL` tinytext COLLATE utf8_unicode_ci,
 `Tamanho` tinytext COLLATE utf8_unicode_ci,
 `Tamanho_Bytes` bigint(10) NOT NULL DEFAULT '0',
 `Data` date DEFAULT NULL,
 `Hora` time NOT NULL DEFAULT '00:00:00',
 `Duracao` time NOT NULL DEFAULT '00:00:00',
 `ZIP` tinyint(1) NOT NULL DEFAULT '0',
 `FTP` tinyint(1) NOT NULL DEFAULT '0',
 `Log` mediumint(5) unsigned zerofill DEFAULT NULL,
 `Usuario` tinytext COLLATE utf8_unicode_ci,
 `Pesquisa` tinyint(2) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

# Registros: 1

INSERT INTO `sis_backup` VALUES 
(00015, "", "Manual", "data", "a:8:{i:1;s:8:\"clientes\";i:2;s:9:\"sis_acoes\";i:3;s:10:\"sis_backup\";i:4;s:8:\"sis_base\";i:5;s:7:\"sis_log\";i:6;s:15:\"sis_log_eventos\";i:7;s:10:\"sis_sessao\";i:8;s:10:\"sis_tabela\";}", "localhost", "arquivos/bkp", "20120531.185307.base_v3_0.manual.sql.gz", "arquivos/bkp/20120531.185307.base_v3_0.manual.sql.gz", "11.08 Kb", 11349, "2012-05-31", "18:53:07", "00:00:00", 1, 0, 00018, "S3c2WjY3NDA=", 0);

# ----------------------------------
# SIS_BACKUP Fim
# ----------------------------------



# ----------------------------------
# SIS_LOG Inicio 
# ----------------------------------

# Estrutura:

DROP TABLE IF EXISTS `sis_log`;
CREATE TABLE `sis_log` (
 `Codigo` mediumint(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
 `Tipo` tinytext COLLATE utf8_unicode_ci,
 `Nome` tinytext COLLATE utf8_unicode_ci,
 `DB` tinyint(1) NOT NULL DEFAULT '0',
 `Diretorio` tinytext COLLATE utf8_unicode_ci,
 `Arquivo` tinytext COLLATE utf8_unicode_ci,
 `Arquivo_URL` tinytext COLLATE utf8_unicode_ci,
 `Tamanho` tinytext COLLATE utf8_unicode_ci,
 `Tamanho_Bytes` bigint(10) NOT NULL DEFAULT '0',
 `Data` date DEFAULT NULL,
 `Hora` time NOT NULL DEFAULT '00:00:00',
 `ZIP` tinyint(1) NOT NULL DEFAULT '0',
 `Backup` tinyint(1) NOT NULL DEFAULT '0',
 `Usuario` tinytext COLLATE utf8_unicode_ci,
 `Pesquisa` tinyint(2) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

# Registros: 4

INSERT INTO `sis_log` VALUES 
(00001, "Diário", "Diário de 30/05/2012", 1, "arquivos/log", "20120530.diario.log", "arquivos/log/20120530.diario.log", "3.84 Kb", 3931, "2012-05-30", "16:24:42", 0, 0, "S3c2WjY3NDA=", 0),
(00008, "Diário", "Diário de 31/05/2012", 1, "arquivos/log", "20120531.diario.log", "arquivos/log/20120531.diario.log", "9.00 Kb", 9215, "2012-05-31", "08:12:17", 0, 0, "S3c2WjY3NDA=", 0),
(00018, "Backup", "Backup manual da base BASE_V3_0", 0, "arquivos/log", "20120531.base_v3_0.manual.log", "arquivos/log/20120531.base_v3_0.manual.log", "227 Bytes", 227, "2012-05-31", "18:53:07", 0, 0, "S3c2WjY3NDA=", 0),
(00019, "Backup", "Backup manual da base BASE_V3_0", 0, "arquivos/log", "20120531.base_v3_0.manual.log", "arquivos/log/20120531.base_v3_0.manual.log", "227 Bytes", 227, "2012-05-31", "19:28:38", 0, 0, "S3c2WjY3NDA=", 0);

# ----------------------------------
# SIS_LOG Fim
# ----------------------------------



# ----------------------------------
# SIS_SESSAO Inicio 
# ----------------------------------

# Estrutura:

DROP TABLE IF EXISTS `sis_sessao`;
CREATE TABLE `sis_sessao` (
 `Codigo` mediumint(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
 `Data` date DEFAULT NULL,
 `ID` tinytext COLLATE utf8_unicode_ci,
 `IP` tinytext COLLATE utf8_unicode_ci,
 `Host` tinytext COLLATE utf8_unicode_ci,
 `SO` tinytext COLLATE utf8_unicode_ci,
 `Navegador` tinytext COLLATE utf8_unicode_ci,
 `Tipo` tinytext COLLATE utf8_unicode_ci,
 `Usuario` tinytext COLLATE utf8_unicode_ci,
 `Atividade` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `Hora_Inicio` time NOT NULL DEFAULT '00:00:00',
 `Hora_Fim` time NOT NULL DEFAULT '00:00:00',
 `Duracao` time NOT NULL DEFAULT '00:00:00',
 `Encerramento` tinytext COLLATE utf8_unicode_ci,
 `Observacoes` tinytext COLLATE utf8_unicode_ci,
 `Expirada` tinyint(1) NOT NULL DEFAULT '0',
 `Status` tinyint(1) NOT NULL DEFAULT '1',
 PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

# Registros: 9

INSERT INTO `sis_sessao` VALUES 
(00001, "2012-05-30", "fdp5mq0896dom3dn0hlprc5as0", "192.168.10.15", "pc-ipis", "Windows XP", "Firefox 12.0", "Administrativo", "S3c2WjY3NDA=", "2012-05-30 16:26:33", "16:24:42", "16:26:33", "00:01:51", 0, "", 0, 0),
(00002, "2012-05-30", "aurh3ru3682ml35117l1gde7u6", "192.168.10.15", "pc-ipis", "Windows XP", "Firefox 12.0", "Administrativo", "S3c2WjY3NDA=", "2012-05-30 17:41:49", "16:26:46", "17:41:49", "01:15:03", 0, "", 0, 0),
(00003, "2012-05-30", "2mhdb3mg7646a41p1ba47b9ea4", "192.168.10.15", "pc-ipis", "Windows XP", "Chrome 18.0.1025.168", "Administrativo", "cEtNVXc=", "2012-05-30 17:41:45", "16:46:41", "17:41:46", "00:55:05", 0, "", 0, 0),
(00004, "2012-05-30", "50n1vg4nl0eog66kclio2ph4f2", "192.168.10.15", "pc-ipis", "Windows XP", "Firefox 12.0", "Administrativo", "S3c2WjY3NDA=", "2012-05-30 18:25:22", "17:44:06", "00:00:00", "00:00:00", "", "", 0, 1),
(00005, "2012-05-30", "48oa16h6f3lhqc6ine48c9a0b6", "192.168.10.15", "pc-ipis", "Windows XP", "Chrome 18.0.1025.168", "Administrativo", "cEtNVXc=", "2012-05-30 18:25:08", "17:44:27", "00:00:00", "00:00:00", "", "", 0, 1),
(00006, "2012-05-31", "7nq8btrb8c5ptj1ods5mm1g3f7", "192.168.10.15", "pc-ipis", "Windows XP", "Firefox 12.0", "Administrativo", "S3c2WjY3NDA=", "2012-05-31 09:21:09", "08:12:17", "00:00:00", "00:00:00", "", "", 0, 1),
(00007, "2012-05-31", "95cde8fbgkpb2badngdtsu4t35", "192.168.10.15", "pc-ipis", "Windows XP", "Chrome 18.0.1025.168", "Administrativo", "cEtNVXc=", "2012-05-31 10:24:32", "08:17:26", "10:24:33", "02:07:07", 0, "", 0, 0),
(00008, "2012-05-31", "150op42v37cdppjoqrkmscec34", "192.168.10.15", "pc-ipis", "Windows XP", "Firefox 12.0", "Administrativo", "S3c2WjY3NDA=", "2012-05-31 10:24:38", "10:23:31", "10:24:38", "00:01:07", 0, "", 0, 0),
(00009, "2012-05-31", "iajsg9btd0g71jmv77im57fjh6", "192.168.10.15", "pc-ipis", "Windows XP", "Firefox 12.0", "Administrativo", "S3c2WjY3NDA=", "2012-05-31 19:28:37", "10:25:25", "00:00:00", "00:00:00", "", "", 0, 1);

# ----------------------------------
# SIS_SESSAO Fim
# ----------------------------------



# ----------------------------------
# SIS_TABELA Inicio 
# ----------------------------------

# Estrutura:

DROP TABLE IF EXISTS `sis_tabela`;
CREATE TABLE `sis_tabela` (
 `Codigo` mediumint(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
 `ID` tinytext COLLATE utf8_unicode_ci,
 `Reg_CadData` date DEFAULT NULL,
 `Reg_CadHora` time NOT NULL DEFAULT '00:00:00',
 `Reg_CadUsuario` tinytext COLLATE utf8_unicode_ci,
 `Reg_AtuData` date DEFAULT NULL,
 `Reg_AtuHora` time NOT NULL DEFAULT '00:00:00',
 `Reg_AtuUsuario` tinytext COLLATE utf8_unicode_ci,
 `Reg_Status` varchar(7) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Ativo',
 `Pesquisa` tinyint(2) unsigned NOT NULL DEFAULT '0',
 `Filtro` tinyint(1) NOT NULL DEFAULT '0',
 PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

# Registros: 0

# ----------------------------------
# SIS_TABELA Fim
# ----------------------------------

 

Função Stable:

 

<?php
/*** LEITURA DE ARQUIVO ***/
Function Backup_Ler_Arquivo($Arquivo = '', $aTabelas = Array(), $Collate = 'utf8_unicode_ci') {

// CONTEUDO
$RT                = Array();
$Conteudo          = Arquivo_Ler($Arquivo, False, False);

// EXECUCAO
Foreach($aTabelas as $Tabela) {
 $Localizado      = preg_match('/[#][ ]'.$Tabela.'[ ]Inicio(.*)[#][ ]'.$Tabela.'[ ]Fim/si', $Conteudo, $Resultado);
 If ( $Localizado )
    { $TMP        = $Resultado[0];
      $Pesquisa   = preg_match('/(DROP[ ]TABLE[ ](IF[ ]EXISTS[ ])?)([`]{1}([a-z_])+[`]{1});/si', $TMP, $Resultado);
      If ( $Pesquisa ) $RT[$Tabela]['DROP'] = $Resultado[0];
      $Pesquisa   = preg_match('/(CREATE[ ]TABLE[ ](IF[ ]NOT[ ]EXISTS[ ])?)(.*)([COLLATE=]'.$Collate.');/si', $TMP, $Resultado);
      If ( $Pesquisa ) $RT[$Tabela]['CREATE'] = $Resultado[0];
      $Pesquisa   = preg_match('/INSERT[ ]INTO[ ](.*)[)];/si', $TMP, $Resultado);
      If ( $Pesquisa ) $RT[$Tabela]['INSERT'] = $Resultado[0];
    }
}

Return $RT;
}
?>

 

var array $aTabelas -> Array com as tabelas que se serao restauradas (é possivel ao usuario selecionar dentre as que foram copiadas anteriormente)

var $Collate -> Adicionei somente pra facilitar a identificação do fim da estrutura

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não permitiria que $arquivo pudesse ser opcional e, se $aTabelas fosse vazio eu listaria tudo de todas as tabelas do BD, numa função à parte, claro.

 

Agora, num geral, eu sugeriria que pelo menos as palavras-chave do PHP você não fizesse capitalizada. Ou maiúsculo, ou minúsculo, sempre aprendi assim.

 

Isso, obviamente, não afeta em nada, porém quem programa dessa forma, acaba inevitavelmente invocando as funções nativas, pelo menos algumas delas, ou algumas vezes, de forma capitalizada também.

 

E isso sim pode dar problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não permitiria que $arquivo pudesse ser opcional e, se $aTabelas fosse vazio eu listaria tudo de todas as tabelas do BD, numa função à parte, claro.

Na verdade ambas são previamente validadas, $Arquivo pela funcao Arquivo_Ler() (inicio do topico) e a $aTabelas já vem exatamente do banco de dados:

 

...
$SQL               = 'SHOW TABLES FROM '.$Base;
$Consulta          = $Conexao->Consulta($SQL);
$Dados             = $Conexao->Dados_Array($Consulta);
Foreach($Dados as $i => $TMP) $Dados[$i] = $TMP['Tables_in_'.$Base]; // Tratamento do retorno
...

Agora, num geral, eu sugeriria que pelo menos as palavras-chave do PHP você não fizesse capitalizada. Ou maiúsculo, ou minúsculo, sempre aprendi assim.

 

Isso, obviamente, não afeta em nada, porém quem programa dessa forma, acaba inevitavelmente invocando as funções nativas, pelo menos algumas delas, ou algumas vezes, de forma capitalizada também.

 

E isso sim pode dar problema.

Escrevo assim pois o codigo fica, esteticamnete, "bonitinho".

Mas isto me assustou, de que tipo de problema estamos falando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!

 

Sinceramente, não vejo motivo pra adotar estes padrões definidos, sabe la Deus por quem, como "maneira bonitinha de escrever código fonte", não me leve a mal mas acho isso pura frescura, hehe.

 

Mesmo assim, obrigado pela participação. ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sempre sugiro adotar o padrão CamelCase.

O mais consolidade no mercado (Java, C#) e, entretanto, menos utilizado no php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sempre sugiro adotar o padrão CamelCase.

O mais consolidade no mercado (Java, C#) e, entretanto, menos utilizado no php.

 

Eu realmente acredito no seguinte, se houvesse "necessidade" de padronização da forma de escrita para PHP isto seria nativo, o javascript é um bom exemplo simples disto, [ IF e If ] nao sao reconhecidos, mas [ if ] sim.

 

Eu gosto de programar, me divirto acima de tudo (é verdade que ganhamos $ também, hehe, o que é uma motivação a mais), mas me desculpem pois enquanto eu não tiver um efeito colateral ralemnte nocivo (que não seja, como citado, dificultar o entendimento do código por outros programadores padronizados, hehe) não vejo motivo de adequarmos a nossa forma de escrita aos "padrões". Eu quero mais e aconselho que se divirtam programando e que escrevam seus códigos da maneira que lhes for de mais simples entendimento, claro, obedecendo a regras básicas, sou apenas contra essa coisa certinha de padronização de tudo.

 

Claro, como bom aluno, estou sempre disposto a melhorar, a corrigir meus erros e, principalmente, a aprender com quem mais sabe, por isso espero que nção encarem o comentário como arrogante, é apenas minha opnião sobre a padronização.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
se houvesse "necessidade" de padronização da forma de escrita para PHP isto seria nativo

Esse é um péssimo pensamento. É um dos motivos dos programadores em PHP serem desvalorizados, em comparação com outras linguagens. Além de um dos motivos de eu estar migrando de linguagem de programação, no âmbito profissional.

 

O PHP inicialmente, pela visão do Rasmus, não queria uma linguagem padronizada e OO. Somente quando a Zend tomou posse do PHP, é a que começou a melhorar a situação. Mais detalhes nesse artigo:

Por que o PHP era um gueto?

 

Veja esse artigo também, é bem interessante:

A diferença entre um cara que programa e um programador

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo @Gabriel, vou ler junto com sua outras dicas anteriores, to curioso pra entender o Interpreter. :P

 

Agora abusando um pouquinho da boa vontade de todos, tem como melhorar (olha o coringa burro la de novo, huahauahua) esta ER:

 

 $Pesquisa        = preg_match_all('/[`]{1}([a-z0-9_]*)[`]{1}[ ](.*)[ ]DEFAULT[ ]NULL[,]/i', $BKP[$Tabela]['Estrutura'], $Resultado);
 If ( $Pesquisa ) $BKP[$Tabela]['NULL'] = $Resultado[1];

 

O objetivo é identificar todos os campos padrão null para poder na hora da geração do arquivo de backup imprimir na saída [ field = NULL ] ao inves de [ field = '' ] pois isto esta dando problema com campos do tipo date e com default NULL.

 

Usando a dica do @Bruno eu ja removi o modificador s pra restringir o escopo da busca as linhas individualmentes.

Só ressaltando que a pesquisa é feita apenas na estrutura da tabela gerada pela query SHOW CREATE TABLE, ex:

 

DROP TABLE IF EXISTS `sis_backup`;
CREATE TABLE `sis_backup` (
 `Codigo` mediumint(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
 `Alvo` tinytext COLLATE utf8_unicode_ci,
 `Tipo` tinytext COLLATE utf8_unicode_ci,
 `Base` tinytext COLLATE utf8_unicode_ci,
 `Base_Tabelas` longtext COLLATE utf8_unicode_ci,
 `Base_Servidor` tinytext COLLATE utf8_unicode_ci,
 `Diretorio` tinytext COLLATE utf8_unicode_ci,
 `Arquivo` tinytext COLLATE utf8_unicode_ci,
 `Arquivo_URL` tinytext COLLATE utf8_unicode_ci,
 `Tamanho` tinytext COLLATE utf8_unicode_ci,
 `Tamanho_Bytes` bigint(10) NOT NULL DEFAULT '0',
 `Data` date DEFAULT NULL,
 `Hora` time NOT NULL DEFAULT '00:00:00',
 `Duracao` time NOT NULL DEFAULT '00:00:00',
 `ZIP` tinyint(1) NOT NULL DEFAULT '0',
 `FTP` tinyint(1) NOT NULL DEFAULT '0',
 `Log` mediumint(5) unsigned zerofill DEFAULT NULL,
 `Usuario` tinytext COLLATE utf8_unicode_ci,
 `Pesquisa` tinyint(2) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

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.