PHP Gmail 代理电子邮件中忽略的参数

PHP Parameters ignored in Gmail Proxy email

我正在通过使用参数确定要显示的图像的电子邮件发送 PHP 图像。此图像显示在除 Gmail 之外的所有电子邮件客户端中。这是由于 Google 用户内容代理,它环绕 link 并显示 php 文件,同时忽略附加到它的参数。

我好像和这个问题一样的问题, 。他们的解决方案如下:

I resolved it using https://www.example.com/tracking.php/order_id=1 instead and then on the tracking.php I didn't use $_GET but $_SERVER['REQUEST_URI'] and parsed the /order_id= String.

问题是我不明白该怎么做。

当我访问 test.php?par=1 的文件 URL 时,我可以使用 $_GET 获取 par。如果我将文件 URL 切换为 test.php/par=1,我会收到 404 错误。

如何在仍然首先访问 test.php 的同时使用 /par=1 作为我的参数,以便我可以使用 $_SERVER['REQUEST_URI'] 拉取整个 url?

test.php?par=1 是一个名为 test.php 的脚本,其查询字符串键为 par,值为 1.

如果您没有启用 pathinfo,则 test.php/par=1 是一个目录名称 test.php,并且该目录中的一个不存在的文件名为 par=1

请注意 PHP 不会将路径信息数据解析为 $_GET。为此只处理实际的 ?key=val 类型的查询值。您必须自己挖掘 $_SERVER['PATH_INFO'] 并自行解析。

我能够让它正常工作并针对 Gmail 进行测试。我的 php 图片成功显示!

我编辑了我的 test.php 文件:

test.php?val=1

$value = $_GET['val'];

为此:

测试.php/val=1

$uri = $_SERVER['REQUEST_URI'];
$path = substr($uri, strpos($uri, "val="));
$delim = 'alv=';
$tok = strtok($path, $delim);

$tokens = array();
while ($tok !== false) {
    array_push($tokens, $tok);
    $tok = strtok($delim);
}
$value = $tokens[0];