Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Pessoal, preciso urgente aprender a fazer uma aplicação web offline com php e html 5. Gostaria basicamente de um exemplo, onde nessa aplicação seja possível navegar offline e inserir dados em uma pasta local do pc, e quando eu conectar ter a possibilidade de alimentar uma base de dados remota com esses mesmos dados.
Então imaginem a seguinte estrutura:
1 - index.php : Aqui a tela inicial da aplicação contendo um form com um input text e um button submit.
2 - cadastrar.php :Quando eu escrever no input do index e pressionar o submit, Os dados serão enviados para o esse arquivo, que será responsável pelo post das informações e armazenamento local.
3 - O insert desses dados tem que ser direcionado a uma pasta local da máquina, e quando eu estiver conectado, preciso ter a possibilidade de atualizar a base de dados com essas mesmas informações.
Alguém consegue me mostrar como fazer isso??? por favoooor...
Beleza..criei um index.php:
<!DOCTYPE html>
<html manifest="/<strong>offline</strong>.manifest">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Offline app</title>
<link rel="stylesheet" type="text/css" href="css/global.css"/>
<link rel="stylesheet" type="text/css" href="css/medias.css"/>
</head>
<body></body>
</html>
um .htaccess:
AddType text/cache-manifest .manifest
e um offline.manifest:
CACHE MANIFEST
#This is a comment
CACHE
index.php
global.css
medias.css
Será que com isso já consigo navegar offline?
Agora preciso saber como usar o sqlite.....
Um server (XAMPP/WAMP) não supre sua necessidade?
Um server (XAMPP/WAMP) não supre sua necessidade?
Possivelmente sim..
Mas como posso fazer para que o arquivo com dados de tabela, armazenado na base local, seja lido com php pelo nevegador e depois poder criar um novo arquivo (ou atualizar o mesmo) nesse mesmo diretorio?
Só dar permissões aos diretórios (escrita/leitura)
>
Crie uma rotina agendada (cron) que verifique se existe conexão à internet. Se houver, envie os dados do SQLite para o BD remoto
Para verificar se há conexão, um simples ping (ou file_get_contents()) em google.com já resolve.
Pra atualizar os dados após existir conexão, basta seguir o que o Beraldo disse...
Mas deve tomar cuidado com o propósito do seu sistema, pois se outros tiverem acessos e poderes de alterar/editar/excluir dados, isso pode gerar inconsistências xD
Agora eu fiquei na dúvida...
Você está complicando algo simples
ou
Você não explicou exatamente o que quer fazer
1. Você quer fazer um sistema que rode via Internet, mas que dispense a conexão (a conexão seria necessária só no primeiro acesso)?
Nesse caso seria melhor pensar em LocalStorage (do HTML 5) em vez de SQLite
Ou
2. Você terá uma instância da aplicação em cada cliente? Nesse caso, seria como ter o PHP rodando em cada máquina.
Aí é só usar a ideia que eu citei no começo
Quero uma aplicação online, que continue navegando caso caia conexão e que nesse momento os dados seja armazenados localmente para que seja possivel atualiza-los na base remota quando houver conexão novamente.
Tipo pelo o que eu entendi vc quer.
Que exista o seu sistema na NET para acessar de fora, e caso caia a internet do cliente ele acesse o sistema na própria dele e quando a net voltar ele volta a acessar na NET... é isso né????
para vc fazer isso vc deverá ter 2 servidores, uma na WEB e outro na rede local do cliente, só que uma aplicação dessa é meio chato vc controlar as informações, pois vc vai ter que ficar toda hora os dois bancos para ter esses dados atualizados, e para que funcione sem que o cliente veja que caiu a net vc terá que fazer ele sempre acessar o sistema pelo servidor local, e no sistema ele verifica se caiu ou não a net, se não caiu ele se conecta ao banco na web senão no banco local.
Ai eu pergunto, a net do seu cliente cai direto? Vale a pena fazer esse esforço?
Que fazer isso vc tem que tomar muito cuidado com relacionamentos dos dados, pois imagina duas situações...
Digamos que seja uma empresa de vendas de produtos, caiu a net na FILIAL 1 mas na FILIAL 2 não, dai a FILIAL 1 irá acessar local, e ao fazer uma Nota Fiscal ele vai dar um ID para essa nota e relacionar os pedidos com akela ID, e na FILIAL 2 que está tudo ok tb irá gerar uma Nota Fiscal com seus pedidos, isso pode acontecer dos dois criarem a mesma ID e pode fazer uma bagunça com suas informações... Isso é um exemplo simples.. imagina que dai vc faça um cadastro de cliente novo e a nota vai relacionar com esse cliente tb e por ai vai... Cada vez mais vai complicando
Se a aplicação for em PHP, aí vai precisar de servidor local, como o wolfphw citou.
Pra evitar isso, pode programar tudo em Javascript, usando LocalStorage. Quando houver conexão, faça as requisições remotas para sincronizar o localStorage com o DB remoto
Com AngularJS é simples fazer tudo isso. O sistema de rotas dele gerencia as URLs de forma bem tranquila
O objetivo da aplicação é poder acessar tanto online quanto offline, podendo persistir os mesmos dados de banco. Penso em duas possibilidades: Manter o mesmo endereço de acesso estando on ou offline e podendo continuar navegando e armazenando dados localmente para posterior sincronização online, ou, no momento em que identifica a ausência de conexão, ser direcionado a uma aplicação voltada para o uso offline, apresentando algumas diferenciações da online... sendo assim, tenho essas duas idéias em mente, e gostaria de entender como ficaria melhor de se fazer tanto uma quanto a outra..
Redirecionar para outro local só será possível se houver uma aplicação local rodando. E esse redirecionamento deveria ser feito no próprio Javascript, já que não haveria conexão para fazer uma requisição ao servidor remoto.
Se quiser ter todo o conteúdo do banco remoto na aplicação offline, você terá de salvar tudo (ou o principal) no localStorage do usuário.
Já deu uma olhada no localStorage, como sugeri?
>
Redirecionar para outro local só será possível se houver uma aplicação local rodando. E esse redirecionamento deveria ser feito no próprio Javascript, já que não haveria conexão para fazer uma requisição ao servidor remoto.
Se quiser ter todo o conteúdo do banco remoto na aplicação offline, você terá de salvar tudo (ou o principal) no localStorage do usuário.
Já deu uma olhada no localStorage, como sugeri?
Estou considerando a possibilidade do localStorage ou Sqlite... o localstorage com html5 me parece bem interessante, confesso que ainda não consegui parar e entender por onde começar a utilização.
E o redirecionamento com o offline.manifest me parece uma possibilidade, não?
Esquece o SQLite. Eu citei no começo pensando que seria uma aplicação PHP 100% local.
Se é algo pra rodar no navegador, tem que ser com Javascript. E o JS não trabalha com SQLite. Tem que ser com localStorage mesmo.
E a bos notícia é que é muito mais simples usar localStorage do que SQLite.
Olha aí http://www.w3schools.com/html/html5_webstorage.asp
Sobre o manifest, já não posso dizer muita coisa. Nunca mexi com isso. Mas achei este artigo da Moziila.
Talvez você já tenha visto, mas segue o link: https://developer.mozilla.org/pt-BR/docs/Web/HTML/Using_the_application_cache
a ideia geral não é nada diferente de um sistema web como outro qualquer
Não mudará nada.
Você pode salvar esses dados em um banco de dados SQLite, por exemplo.
Crie uma rotina agendada (cron) que verifique se existe conexão à internet. Se houver, envie os dados do SQLite para o BD remoto
Para verificar se há conexão, um simples ping (ou file_get_contents()) em google.com já resolve.