Path Dinâmico

De Wiki REDDES

Para resolver o problema de PATH_TRANSLATED no IsisScript para o Apache 2.0 segue um script que faz a "tradução" do path.

Este script foi criado pois ao chamar a variavel de ambiente PATH_TRANSLATED no Apache 2.x o endereço traz a página de "index" que estiver ho htdocs, isso ocorre no caso de existir qualquer página que esteja setada no DirectoryIndex na criação do host.

Obs: Ele está adaptado a necessidade do LIS, não foi possível encontrar uma solução que atendensse todas as situações.

O arquivo path.lis deve ser incluido em todos os arquivos .xis (<include>path.xis</include>), e tem como premissas:

- A existencia do arquivo lis.def em: htdocs/lis/lis.def - A possibilidade do arquivo ser chamado em arquivos no endereço: htdocs/lis-Regional/

Para chegar ao resultado, que são as varáveis de ambiente setadas, é necessário usar um arquivo como referência e o arquivo escolhido foi o lis.def que neste caso seria uma referência "segura", ou sja, que tem menos ou nenhuma chance de ser alterado na instalação.


cgi-bin/path.xis

<!--
Parametros:
        v2004   Nome do arquivo.def

Tags presentes:

        v2000   Path completo com nome do arquivo.def
        v2001   Path sem o nome do arquivo.def
        v2002   Path Traduzido
        v2003   '/' ou '\' dependendo que tiver no PATH_TRANSLATED

Retorno:
        A funciton nao retorna nenhuma tag, mas cria variaveis de ambiente:

        PATH_LIS                Path completo sem nome de arquivo para ser usado nos .xis chamados em /lis/
        PATH_LISREGIONAL        Path sem nome de arquivo para ser utilizado nos .xis chamados em /lis-Regional/

-->

<function name="pathDinamico" action="replace" tag="2004">

        <!-- Cria a variavel de ambiente PATH_LIS com o valor de PATH_TRANSLATED forcando o diretorio /lis/ (local do arquivo.def)  -->
        <display><pft>putenv('PATH_LIS=',replace(getenv('PATH_TRANSLATED'),'/lis-Regional/','/lis/'))</pft></display>

        <!-- Tenta carregar o arquivo -->
        <field action="replace" tag="2000"><pft>,cat(getenv('PATH_LIS'),v2004),</pft></field>

        <!-- Pula a alteracao do path caso o cat nao consiga carregar o arquivo -->
        <flow action="jump"><pft>
                if v2000<>'' then,
                        'PathOK',
                fi
        </pft></flow>

                <!-- Guarda o valor do PATH em uma tag para ser manipulado -->
                <field action="replace" tag="2001"><pft>getenv('PATH_LIS')</pft></field>

                <!-- Verifica a presenca da barra invertida no PATH para re-montar corretamente  -->
                <field action="replace" tag="2003"><pft>
                         if v2001 : '/' then,
                                '/',
                        else,
                                '\',
                         fi,
                </pft></field>

                <!-- Divide o PATH a cada barra e transforma em valor repetitivo -->
                <field action="replace" tag="2001" split="occ"><pft>
                        if(v2003='/') then,
                                proc('Gsplit/clean=2001=/'),
                        else,
                                proc('Gsplit/clean=2001=\'),
                        fi
                </pft></field>

                <!-- Remonta o PATH sem a ultima ocorrencia -->
                <field action="replace" tag="2002" split="occ"><pft>
                        if(v2003='/') then,
                                (if iocc=nocc(v2001) then,
                                        break,
                                else,
                                        v2001|/|,
                                fi),
                        else,
                                (if iocc=nocc(v2001) then,
                                        break,
                                else,
                                        v2001|\|,
                                fi),
                        fi
                </pft></field>

                <!-- Carrega o arquivo.def com o novo PATH -->
                <field action="replace" tag="2000"><pft>
                        cat(v2003,(v2002),v2004)
                </pft></field>

                <!-- Guarda na variavel de ambiente PATH_LIS o novo valor de PATH -->
                <display><pft>
                        putenv('PATH_LIS=',v2003,(v2002))
                </pft></display>

                <!-- Exibe erro caso o  cat nao consiga carregar o arquivo -->
                <flow action="jump"><pft>
                        if v2000<>'' then,
                                'PathOK',
                        fi
                </pft></flow>

                        <!-- Erro que ocorre quando mesmo tentando mudar o PATH ainda nao foi possivel carregar o arquivo -->
                        <display><pft>
                                '<b>Erro ao carregar:</b> ',getenv('PATH_LIS'),v2004,'<br />',
                                'Verifique a localização e as permissões do arquivo.<br /><br />'
                        </pft></display>

        <!-- Label utilizada como referencia -->
        <label>PathOK</label>

        <!-- Cria a variavel de ambiente PATH_LISREGIONAL com o valor de PATH_LIS forcando o diretorio /lis-Regional/ -->
        <display><pft>
                putenv('PATH_LISREGIONAL=',replace(getenv('PATH_LIS'),'/lis/','/lis-Regional/'))
        </pft></display>

</function>

<!-- Chama a funciton enviando o nome do arquivo.def-->
<call name="pathDinamico">lis.def</call>
Herramientas personales