Pergunta

Ok, então eu pesquisei um par de páginas e chegar com a seguinte solução:

Adicione isso no .htaccess
#Active GZIP for php-files
php_flag zlib.output_compression On 
php_value zlib.output_compression_level 5

e isso para js e CSS:

AddHandler application/x-httpd-php .css .js
php_value auto_prepend_file /Library/WebServer/Documents/blog/code/Helpers/ContentHeader.php

Qual será executado js bem como .css como scripts PHP. A segunda linha inclui a seguinte página:

<?php
    $pathInfo = pathinfo($_SERVER['PHP_SELF']);
    $extension = $pathInfo['extension'];

    if($extension == "css")
    {
        header("Content-type: text/css");
    }
    if($extension == "js")
    {
        header("Content-type: text/javascript");
    }
?>

O que vai enviar cabeçalho "text / css" para arquivos .css e "text / javascript" para arquivos javascript. Por enquanto, tudo bem. O problema, porém, é com um par de javascripts minified que eu uso eu recebo algum tipo de erro php:

<br />
<b>Parse error</b>:  syntax error, unexpected ']' in <b>/Library/WebServer/Documents/blog/public/scripts/prettify/prettify.js</b> on line <b>18</b><br />

ou:

<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br />
<br />
<b>Parse error</b>:  syntax error, unexpected '?' in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br />

Assim, há alguma maneira melhor de fazer isso? A única opção que eu posso vir acima com é ir manualmente para os arquivos .javascript e "corrigir os erros" que php não gosta. Mas não deveria ser uma solução mais fácil?

Foi útil?

Solução

A razão que você está recebendo este erro é que os scripts contêm <?. Por exemplo, em prettify.js é esta:

/^[^<?]+/

Você está passando isso em PHP, assim que inicia o motor de PHP vai novamente e vê uma ] inesperado.

Eu iria com o método de @ jonstjohn, ou @ cletus de se precisar de mais controle.

Outras dicas

Apache mod_deflate e usar a configuração de exemplo mostrado lá . Funciona muito bem sem mexer no PHP.

Na verdade, eu servir meus arquivos JS a partir de um script PHP. Não por causa deste problema, mas para que eu possa controlar o cabeçalho e cache expira. O modelo geral é:

  • A URL é algo como /script/blah.1234567890.js;
  • Essa URL é gerada a partir do mtime do arquivo blah.js;
  • Essa URL é enviado a um script js.php através de uma regra de reescrita no .htaccess;
  • O script do mtime passaram em Se a sua mais recente que o mtime da versão em cache gera uma nova versão em cache de todos os meus arquivos JS (que são agrupadas em um único arquivo e, em seguida, minified com JSMin);.
  • Se o mtime não é mais recente que o roteiro, a versão em cache é simplesmente servido;
  • Em todos os casos, o conteúdo é definido para expirar daqui a um ano.

O timestamp na URL permite atualizar o arquivo de script.

Agora, como isso se relaciona com gzipping? Simples. No topo do meu script js.php é:

ob_start("ob_gzhandler")

que gira em torno de compressão gzip se os suportes IT Client (bem como usando o buffer de saída).

Ele funciona realmente.

Tente e limitar-se a exatamente um JS e um arquivo CSS. Combiná-los se necessário. Eu faço o mesmo truque com arquivos CSS também (não minification é claro).

A vantagem desta solução é que só depende de ser mod_rewrite habilitado. Nenhuma outra extensão é necessária (ob_gzhandler é uma parte padrão do PHP). Além disso, um script é necessário combinar os arquivos (a menos que você fazer isso como parte de um processo de construção, mas eu acho isso um pouco mais tedioso).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top