【问题标题】:How to fetch a resource through a php script?如何通过 php 脚本获取资源?
【发布时间】:2010-12-06 12:55:50
【问题描述】:

我正在尝试在我的网络应用程序中执行以下操作:

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

是否可以让我的服务器(我在共享托管环境中使用 Apache)在访问 .jpg(或我选择的任何文件类型)时运行 PHP 脚本,而不仅仅是提供文件?

我知道 PHP 脚本必须设置正确的标头等,我只是想知道如何首先运行它。

我知道可以这样做:

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

但这不是我想要的。

【问题讨论】:

    标签: php server-configuration


    【解决方案1】:

    您可以使用 mod_rewrite,前提是您位于子目录中,或者您的其他 static.example.com 将这样做。

    在子目录中的 .htaccess 中添加类似的内容。

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

    编辑:试试上面的。像其他一切一样,未经测试... :)

    GET 参数的顺序变得很重要。

    test.jpg?height=100&width=120
    

    应该变成

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


    另一种方法是让 apache 将 .jpg 作为该目录的 php 脚本提供服务。 只需查看您的 httpd.conf 或 php.conf 并查找 .php。找到该指令,并在 &lt;Directory&gt; 中复制它以获取 .jpg。 我从来没有真正为单个目录尝试过这个,但最终它会比 mod_rewrite 路由更快。

    类似:

    <Files *.jpg>
    SetOutputFilter PHP
    SetInputFilter PHP
    </Files>
    AddType application/x-httpd-php .jpg
    

    【讨论】:

    • 我假设 .* 可以更改为 .*jpg 或其他正则表达式以匹配我想要的扩展名,对吗?
    • 它几乎可以工作,但我认为参数没有正确传递。这是我的查询字符串:image01.jpg?height=200&width=300 这是我的 .htaccess 中的内容: RewriteEngine On RewriteRule (.*\.jpg|.*\.png|.*\ .gif) controller.php?q=$1 但是当我打印 $_SERVER['QUERY_STRING'] 时,它会给出 q=image01.jpg (我希望它给出 height=200&width=300)。感谢您的帮助。
    • 如果打印 $_GET['q'] 会发生什么?
    • 我认为发生了什么,是因为我们指定 ?stuff=asdf 我们覆盖了原始查询字符串。我修改了上面的代码以使用新参数传播原始参数。希望它有效。
    猜你喜欢
    • 2020-02-19
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多