Pergunta

Estou tentando fazer o seguinte no meu aplicativo da web:

<img src="static.example.com/image01.jpg?width=300&height=300" />

É possível ter meu servidor (eu uso o Apache em um ambiente de hospedagem compartilhado) executar um script PHP ao acessar um .jpg (ou qualquer tipo de arquivo que eu escolhi) em vez de apenas servir o arquivo?

Eu sei que o script PHP precisa definir os cabeçalhos certos, etc., só estou me perguntando como ele pode ser executado em primeiro lugar.

Eu sei que isso pode ser feito assim:

<img src="static.example.com/get_image.php?name=image_01.jpg&width=300&height=300" />

Mas não é assim que eu gostaria de tê -lo.

Foi útil?

Solução

Você pode usar mod_rewrite, desde que esteja em um subdiretório, ou isso é todo o seu outro static.example.com estará fazendo.

Adicione algo assim ao seu .htaccess nesse subdiretório.

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{query_string} ^height=([^&]+)&width=([^&]+)
   RewriteRule (.*\.jpg|.*\.png|.*\.gif) controller.php?name=$1&height=%1&width=%2
</IfModule>

EDIT: Experimente o acima. Como tudo o mais, não testado ... :)

A ordem dos parâmetros GET se torna importante.

test.jpg?height=100&width=120

deve ser transformado em

controller.php?name=test.jpg&height=100&width=120


Outra abordagem seria fazer com que o Apache sirva .jpg como scripts PHP para esse diretório. Basta olhar no seu httpd.conf ou php.conf e procurar .php. Encontre essa diretiva e duplique -a dentro de um <Directory> para .jpg. Na verdade, nunca tentei isso para um único diretório, mas, em última análise, seria mais rápido que a rota Mod_rewrite.

Algo como:

<Files *.jpg>
SetOutputFilter PHP
SetInputFilter PHP
</Files>
AddType application/x-httpd-php .jpg
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top