0

I am sending a PHP image through email that uses parameters to determine the image to display. This image displays in every email client except Gmail. The reason for this is due to the Google User Content Proxy, which wraps around the link and shows the php file while ignoring the parameters attached to it.

I seem to have the same problem as this question, Problems with tracking pixels and Gmail proxy. Their solution was the following:

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.

The problem is I don't understand how to do this.

When I visit the file URL for test.php?par=1, I am able to pull par using $_GET. If I switch the file URL to test.php/par=1, I receive a 404 error.

How do I use /par=1 as my parameter while still accessing test.php first so I can pull the whole url using $_SERVER['REQUEST_URI']?

Community
  • 1
  • 1
Morgan
  • 574
  • 9
  • 28

2 Answers2

3

test.php?par=1 is a script named test.php with a query string key of par and value 1.

If you do not have pathinfo enabled, then test.php/par=1 is a DIRECTORY name test.php, and a non-existent file in that directory named par=1.

Note that PHP won't parse pathinfo data into $_GET. Only actual ?key=val-type query values are processed for that. You'll have to dig out $_SERVER['PATH_INFO'] and parse it yourself.

Marc B
  • 356,200
  • 43
  • 426
  • 500
0

I was able to get this working and tested for Gmail. My php image successfully shows up!

I edited my test.php file from this:

test.php?val=1

$value = $_GET['val'];

To this:

test.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];
Morgan
  • 574
  • 9
  • 28