Apache: Como posso servir JavaScript via PHP?

3

Eu quero servir meus arquivos JavaScript por meio de um script PHP.

Um exemplo seria:

Se eu solicitasse um arquivo JavaScript chamado dir/my_file.js

O servidor deve redirecionar a solicitação para um script de manipulador chamado my_script_server.php?src=dir/my_files.js

Como posso fazer isso no Apache?

    
por Christian Toma 01.03.2010 / 11:43

3 respostas

2

Algo parecido com isso provavelmente é o que você procura:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(dir/.*\.js)$ my_script_server.php?src=$1 [L,QSA]
</IfModule>

As linhas que terminam em -f e -d garantem que o arquivo ainda não esteja lá, e a regra final procura por solicitações que correspondam a .js arquivos na pasta dir/ e os envie transparentemente ao seu php roteiro.

Eu modifiquei esse código de um arquivo htaccess que eu tinha por aí, mas seria semelhante se você fosse colocá-lo no arquivo de configuração httpd, acredito.

Há muito mais informações nos documentos do Apache no módulo mod_rewrite .

    
por 01.03.2010 / 12:05
2

Você poderia apenas servir o script a partir de um arquivo php - isso funciona bem no ASP, então deve ser igualmente bom para o PHP.

Eu costumo manter ".js" no nome do arquivo, então eu sei o que é o que, como "some_dynamic_script.js.asp" ou no seu caso "some_dynamic_script.js.php". Então apenas certifique-se de que o seu script gere uma resposta de javascript formatada corretamente e inclua-a da maneira usual com algo como <script type="text/javascript" src="some_dynamic_script.js.php"> - você pode até passar opções na querystring para o código php reagir, se desejar, como <script type="text/javascript" src="some_dynamic_script.js.php?option1=value1&option2=value2&option3=value3"> . / p>

Se você está propenso a distribuir seu código para outras pessoas ou instalá-lo em sistemas que você não controla, isso tem uma vantagem sobre o mod_rewrite, pois você não tem a etapa de instalação extra (adicionando os controles de reescrita à configuração do apache ou .htaccess, que pode não funcionar se o host não tiver o mod_rewrite ativado).

Eu lembro que houve problemas com alguns navegadores mais antigos que não gostavam do javascipt sendo servido sem o tipo mime correto, então certifique-se de definir isso com header("Content-Type: text/javascript"); apenas no caso (caso contrário a resposta provavelmente será server como text / html por padrão ) - embora eu tenha notado que alguns dos meus códigos não estão fazendo isso e está funcionando bem no IE6 / 7/8, FF2 / 3 / 3.5 / 3.6 e pelo menos uma versão do Chrome .

Uma questão importante a saber, se você usa mod_rewrite ou php mais diretamente, é claro que se o código php fizer alguma coisa com a entrada da string de consulta ou do banco de dados do aplicativo você precisa garantir, como todo o seu código , os dados são adequadamente selecionados para evitar possíveis ataques de injeção e XSS.

Outro problema, menor, para estar ciente é o controle de cache. O processador PHP será o padrão para marcar a saída como sempre precisando ser re-solicitado, onde para um arquivo JS simples o Apache pode retornar uma resposta "304 não modificada" se o navegador indicar que fez anteriormente a mesma solicitação, que se o script ser devolvido não muda pode ser um desperdício de sua largura de banda e fazer com que a resposta pareça mais lenta para usuários remotos. Este não é um problema se o seu aplicativo estiver sempre hospedado em HTTPS (como nada servido via HTTPS deve ser armazenado em cache de qualquer maneira), mas pode ser uma consideração para grandes blocos de script separados por HTTP. Se isso puder ser um problema para você, há maneiras de manipular o controle de cache para recuperar sua vantagem.

    
por 01.03.2010 / 12:41
0

Use uma combinação de coisas:

  • mod-rewrite para fazer com que o php pareça ser um arquivo js
  • envie um cabeçalho a partir do topo do arquivo php para fazer o navegador pensar que é realmente um javascript

    header('Content-Type: application/javascript');

A parte realmente legal é que você pode adicionar conteúdo dinâmico ao 'arquivo javascript' do servidor, por exemplo, passando o ambiente de php para javascript:

var environment = <?=getenv('APPLICATION_ENV');?>

// More JS code here ...
    
por 05.09.2013 / 08:30