Click aqui para ver o demosite.prgIMPORTANTE: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.
  2. Quem é o usuário do CGI.
  3. I/O de tela e a estrutura de programação do CGI.
  4. Esquemas de compilação para CGI e HTML estático.
  5. Sintaxe de comandos.
  6. Precedência dos comandos.
  7. Exemplo de programa para CGI.
  8. Exemplo de programa criando HTML.
  9. Arquivos a disponibilizar.
  10. Exemplos / literatura sobre Javascript.
  11. Errorsys. (novo 3/2000)

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:

  1. Voce executa o login como um usuário qualquer e executa o comando su <enter> e digita a senha do usuário “ROOT”.
  2. Voce executa o login como usuário “ROOT”.
  3. Login como "webadmin". Isto irá aumentar a seguraça ou voce pode pedir ao administrador de seu site para alterar as permissões..

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
Notas:

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:

  1. Não tem entrada de dados via teclado mas sim via STDIN. E o envio de dados para o CGI pode ser feito de duas formas:


  2. POST - Não querendo me aprofundar muito nesta questão, podemos verificar que por diversas razões esta é a forma mais segura e usada pelos provedores, porque o cliente não vê como os dados são enviados para o CGI, logo não consegue alterar dado algum durante o envio.
    GET - O envio dados via GET é feita pelo Browser colocando os dados todos em uma única linha de comando,
    ex:http://servidor/cgi-bin/teste.sh?nome=joge%32somers &empresa=Somers%32software.
    Como voce pode ver os espaços são trocados por %32, assim como todos os caracteres que não estão compreendidos entre A-Z, 0-1 e a-z são trocados por %hh (código hexa), a este processo damos o nome de escape e a desconversão chamamos de unescape.

  3. Todas as saídas para tela são redirecionadas diretamente para o Browser do cliente.
  4. O programa é executado de ponta a ponta todas as vezes que uma requisição é feita, veja o esquema abaixo:

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:

  1. A velocidade da linha telefônica, que ainda é muito baixa no Brasil.
  2. A velocidade do computador do cliente para processar todo o código HTML.
  3. Número de usuários concorrentes, este número é limitado pela configuração de seu servidor WEB.

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:

  1. Como executável CGI em um servidor WEB.
    Nesta opção voce deverá colocar na linha de link a seguinte lib e objeto:
    libfsweb.a fscgi.o (-lfsweb fscgi.o)
  2. Como gerador de páginas HTML estáticas.
    Nesta opção voce deverá colocar na linha de link apenas a lib fsweb.a (-lfsweb) e voce não poderá utilizar os comandos: BEGIN CGI... e END CGI. (-lfsweb.a).
    ATENÇÃO: Se voce utilizar tambem o objeto fscgi.o o seu sistema não terá a habilidade receber input via teclado nem de enviar dados para a tela de forma posicional.

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:.

Correto
Errado
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.


Comando FSWeb
SAY TEXT "Oi" BOLD ITALIC
Código HTML
<B><I>Oi</I></B>
Efeito finalL
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'


Called from
ProcFileProcNameProcLine
FSERROR_ERRCALLER 186
ADMININC_CLIE 208
SALESMAIN 78


Aliases in use
 WAAliasRecno#IndexOrder#IndexKey
  1CLIENT 2 1field->cod
  2SALES 1 1field->cod
  3HOUSE 46 1field->cod +field->grup
  4CONFIRM 2 1field->cod +field->addr +field->grup +dtos(field->dtini)
* 5GRUPO 1 1field->cod +field->grup

SALES        19: CB_1_19_15()
FSERROR      186: _ERRCALLER()
ADMIN        208: INC_CLIE()
SALES        78: MAIN()
         4


© 2000 Jorge E.Hime Somers
JHSomers@Somers.com.br