![]() |
|
![]() |
![]() |
| Click aqui para ver o demosite.prg | IMPORTANTE:LEIAME antes de iniciar. |
Manual do Usuário do FSWEB
Para se utilizar o FSWEB devemos ter conhecimento dos seguintes tópicos:
1. Permissões de acesso a diretórios e path para arquivos.
O diretório onde será localizado o executável é normalmente chamado cgi-bin, e por razões de segurança, normalmente sómente o usuário ROOT (ou webadmin) e o usuário NOBODY têm permissão de leitura e execução (drwx---r-x). O diretório cgi-bin tem um alias na configuração do servidor Web para um diretório físico, ex: /usr/local/httpd/cgi-bin, veja exemplo abaixo:
Então voce deverá alterar os atributos do executável com as permissões de "root" ou webadmin. Isso poderá ser feito de duas formas:
Se voce quiser que o seu script ou executável CGI tenha acesso a arquivos DBF, então altere as permissões para leitura ou leitura/gravação para o usuário "nobody" e "root" ou "webadmin". Estes são os requisitos mínimos e um pouco inseguro. Para que voce tenha uma maior segurança, considere o seguinte:
Segurança na WEB com Unix:
Todos devem ter o acesso ao diretório cgi-bin ou pelo menos o usuário "nobody".
Logo, não coloque os seus DBFs (ou outros arquivos de uso interno) diretamente no
diretório cgi-bin ou no diretório de documentos, mas sim em um diretório separado
onde apenas a sua aplicação CGI ou scripts tenham acesso, por exemplo em um diretório
especial /cgi-bin/data. Este diretório e os dados tenham acesso restrito, por exemplo
apenas os usuários "root" e "webadmin". Para voce fazer isso, coloque os direitos de
acesso como rwxx------ e os dados lá apenas como rw-------. A aplicação ou script no
diretório /cgi-bin deve ter as suas permissões garantidas para "root" ou "webmaster",
isto é feito utilizando-se a flag "s" ou (4xxx) o que garante ao executável o acesso aos
dados. Exemplo:
su # ou log-in como ex: webmaster egrep "/cgi-bin | /cgi-bin/ " /etc/httpd/*.conf # determina o caminho físico para /cgi-bin se não for connhecido cd /usr/local/httpd/cgi-bin chmod 777 # muda os direitos do diretório cgi-bin mkdir data ; chmod 700 data # cria o diretório e altera permissões para o diretório data cp /home/test/myapplic . ; chmod 4700 myapplic # copia e altera permissões do executável ou script cd data cp /home/test/data/* . ; chmod 600 * # copia e altera permissões do diretório data para r/w
1. Em todos os Unix (e Linux) os nomes dos arquivos são sensíveis a caixa alta/baixa (maiúsculas/ minusculas). Quando o seu executável está com o nome que mistura maiúsculas e minúsculas (ex: "sisTEma"), durante a execução voce deve se referir à ele exatamente como está escrito, ex: <FORM ACTION="/cgi-bin/sisTEma" METHOD="get">, caso contrário voce verá a famosa página "404 page not found" ou "404 página não encontrada" .
2. Sempre considere que o seu executável está sendo executádo no diretório /cgi-bin. Logo se as páginas resultantes de seu CGI se referirem a páginas que que foram criadas fora de seu CGI ou imagens de outro diretório, utilize sempre o URL completo (ex: <A HREF="http://www.somers.com.br/ajudas/ajudademo.html"> </A> ) ou utilize o caminho relatívo ao documento (ex: <IMG SRC="/ajudas/imagens/logo.gif"> ) ou conforme a configuração do seu servidor Web.
3. Mais dicas de segurança e configuração voce pode encontrar (em Inglês) no site da Multisoft na Alemanha. (http://www.fship.com/fs4web.html)
2. Quem é o usuário do CGI.
O CGI é normalmente executado por um "usuário" interno chamado "NOBODY". Este usuário na realidade não existe e não tem permissão de login, mas pode executar o seu programa cgi.
3. I/O de tela e a estrutura de programação do CGI.
O executável CGI é nada mais nada menos que um executável que tem algumas particularidades:
Cliente internet envia o formulário para o servidor web.
Servidor web configura o ambiente e executa o shell.
Shell recebe a requisição e configura o STDOUT/STDIN.
Shell executa o programa CGI.
Programa CGI é executado e FSWEB transfere os dados para variáveis FlagShip.
Programa CGI escolhe qual o tipo de requisição foi feita e executa a(s) rotina(s) necessárias e cria saídas em formato HTML diretamente para o STDOUT e finaliza (quit).
Como voce pode ver, aqui não pode-se dizer que o seu sistema está "rodando" pois o tempo de execução será muito curto. O ideal é que seja menos que 1 ou 2 segundos pois ainda temos que contar com outros fatores:
Então lembre sempre que voce deve fazer com que o programa gere páginas HTML bem pequenas e com poucas tabelas que usem a sintaxe <Table></Table>, pois a página HTML será mostrada para o cliente apenas quando processar </Table>.
Se no seu programa sempre verificar se arquivos existem e for necessária a criação de índices, crie um aviso para o cliente aguardar e assim voce irá evitar que o cliente tente "recaregar" a página várias vezes, evitando assim a sobrecarga de seu servidor web.
O servidor web APACHE do Linux não funciona da mesma forma que o servidor web IIS da Microsoft, que a cada requisição cria um arquivo temporário que será enviado para o cliente web quando o executável CGI-WIN terminar sua execução, tornando este muito lento para o cliente.
O servidor web APACHE do Linux envia as saídas de seu programa diretamente para o cliente web, logo voce não tem que fazer com que o seu sistema antes que termine a execução crie uma página que irá chamar automaticamente a rotina de indexação.
4. Esquemas de compilação para CGI e HTML estático.
Voce pode utilizar o FSWEB de duas formas:
6. Precedência dos comandos.
Diferente de quando criamos um arquivo HTML utilizando o Notepad/Bloco de Notas, o FSWeb em todos os comandos já coloca os comandos na ordem necessária..
No caso dos comandos BEGIN / END devemos sempre especificar os parametros desejados e na ordem correta sem esquecer de terminar todas os comandos:.
BEGIN TABLE BEGIN ROW BEGIN DATA DATA END DATA END ROW END TABLE |
BEGIN TABLE BEGIN ROW BEGIN DATA DATA END ROW END TABLE |
Mas no comando SAY não é necessário o término do comando pois ele internamente já executa o termino do comando, e a ordem que cada comando será colocado é a ordem descrita neste manual.
| SAY TEXT "Oi" BOLD ITALIC | |
| <B><I>Oi</I></B> | |
| Oi |
Os únicos comandos que tem a estrutura BEGIN / END e pode ser omitidos são: Header PreTable / Record PreTable / Footer PreTable neste caso o uso de pelo menos um deles é necessário.
7. Exemplo de programa para CGI.
cgiconnect()
cDemo:=CGIDATA("DEMO")
if cDemo="DEMOTABLE"
BEGIN CGI TITLE "Demo de tabelas no formato Word 97"
BODY bgcolor "LIGHTBLUE" message " OLHA EU AQUI " , ;
" TEM MAIS UMA MENSAGEM !!!" , " ACABOU !!"
SAY TEXT "Demonstração de tabelas formato Word 97" ;
FONT "ARIAL" COLOR NS_NAVY HEADER 5 CENTER
END CGI
endif |
8. Exemplo de programa criando HTML.
BEGIN HTML "../html/teste/veja.html" TITLE ;
"Demo de tabelas no formato Word 97"
BODY bgcolor "LIGHTBLUE" message " OLHA EU AQUI " , ;
" TEM MAIS UMA MENSAGEM !!!" , " ACABOU !!"
SAY TEXT "Demonstração de tabelas formato Word 97" ;
FONT "ARIAL" COLOR NS_NAVY HEADER 5 CENTER
END HTML
|
9. Arquivos a disponibilizar.
Se voce utilizar os comando de Menu ou Gráficos em seu programa voce deverá criar um diretório chamado fsweb no diretório raiz de sua homepage (domínio), normalmente o diretório físico é htdocs/, com os seguintes arquivos:
|
Gráficos: Todos os arquivos do diretório graph de instalação (0.gif até 10.gif, clear.gif, black.gif e graph.js) |
Menus: Todos os arquivos do diretório menu de instalação (arrows.gif, arrows2.gif e menu.js e menu_api.js) |
10. Exemplos / literatura sobre Javascript.
Uma boa referência sobre Javascript voce pode encontrar em: Homepage para desenvolvedores na Netscape
11. Errorsys.
Para simplificar o trabalho de depuração de CGI foi criado um novo errorsys.prg, que pode ser modificado conforme as necessidades do programador.
Para habilitar o uso do novo errorsys voce deverá compilá-lo com o seguinte comando:
FlagShip errorsys.prg -na -nD -m -q -c -w -oerrorsys.o
E na criação de seu sistema voce deverá incluí-lo na lista de arquivos. Para que o CGI utilize efetivamente o novo errorsys voce deverá incluir no início da primeira rotina o seguinte comando:
ErrorBlock( {|e| FS_DefError(e)} )
O novo Errorsys irá mostar uma tela como a abaixo quando ocorrer algum erro
Date 15/03/00 Time:17:13:56
Error BASE/0 cannot find that field
fgsGetAliasField: cannot find field 'CAD'
ProcFile ProcName ProcLine FSERROR _ERRCALLER 186 ADMIN INC_CLIE 208 SALES MAIN 78
WA Alias Recno# IndexOrder# IndexKey 1 CLIENT 2 1 field->cod 2 SALES 1 1 field->cod 3 HOUSE 46 1 field->cod +field->grup 4 CONFIRM 2 1 field->cod +field->addr +field->grup +dtos(field->dtini) * 5 GRUPO 1 1 field->cod +field->grup
SALES 19: CB_1_19_15()
FSERROR 186: _ERRCALLER()
ADMIN 208: INC_CLIE()
SALES 78: MAIN()
4