Como buscar um recurso através de um script PHP?
-
21-09-2019 - |
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.
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