通过PHP脚本提供的图像在浏览器中显示良好,但在电子邮

时间:2016-08-11 14:09:04

标签: php wordpress html-email

我有一个网站,允许用户浏览图像并购买这些图像的打印件。该网站在Wordpress上运行,电子商务方面已被编写为插件。

我想将图像存储在Web根目录之外,因此在插件中创建了一个名为show-image.php的脚本,如下所示:

<?php

if ( ! defined( 'ABSPATH' ) ) exit;

function show_images($content) {

    // Clean the buffer, we're not sending anything but the image
    ob_end_clean();

    global $wpdb;

    //get the ids passed in the url
    $w    = get_query_var("gwpw",false);
    $i    = get_query_var("gwpi",false);

    // if either passed var is not an integer, set them to false
    if (!filter_var($w, FILTER_VALIDATE_INT, array('min_range' => 1)) || !filter_var($i, FILTER_VALIDATE_INT, array('min_range' => 1)))
    {
        $w   = false;
        $i   = false;
    }

    $w_table_name = $wpdb->prefix . 'table1';
    $i_table_name   = $wpdb->prefix . 'table2';

    $wrow = $wpdb->get_row($wpdb->prepare("SELECT * FROM $w_table_name WHERE wid = %d",$w));
    $irow   = $wpdb->get_row($wpdb->prepare("SELECT * FROM $i_table_name WHERE itemid = %d AND wid = %d",$i,$w));

    $i_path = realpath($_SERVER['DOCUMENT_ROOT'] . '/../') . '/' . $wpdb->prefix . 'images/' . $w . '/' . $irow->filename;

    if (!$w || !$i || $w == null || $i == null || !file_exists($i_path) || !is_file($i_path))
    {
        header("HTTP/1.0 404 Not Found");
        exit;
    }

    // get the image details, send them in the header, then send the file and exit

    $info       = getimagesize($i_path);
    $fs         = filesize($i_path);

    header ("Content-Type: {$info['mime']}\n");
    header ("Content-Disposition: inline; filename=\"$irow->filename\"\n");
    header ("Content-Length: $fs\n");

    readfile($i_path);

    exit;
}
?>

在我的插件的functions.php中:

add_filter( 'the_content', 'gwp_ec_content_filter' );
add_filter('query_vars', 'gwp_ec_filter_queryvars' );

function gwp_ec_content_filter ($content)
{
    if (get_query_var('gwpw',false) && get_query_var('gwpi',false))
    {
        $content = '';
        $content = show_images($content);
    }

    return $content;
}

function gwp_ec_filter_queryvars( $qvars )
{
$qvars[] = 'gwpw';
$qvars[] = 'gwpi';
return $qvars;
}

这一切都可以在浏览器中完美运行,我可以浏览www.mysite.co.uk/?gwpw=1&gwpi=1,我可以提供我应该的形象。我已经检查过它不是缓存图像的浏览器,我真的得到了图像。

但是,当我将此作为HTML电子邮件中图像标记的src属性包含在内时,iOS和OSX上的Apple Mail将无法显示图像。我可以查看电子邮件的来源,将图片的网址从邮件来源复制并粘贴到浏览器中,并且工作正常。

我认为我在show-image.php中提供图像的方式一定有问题,好像我将src指向网络根目录中的图像,例如www.mysite.co.uk/wp-content/plugins/myplugin/image.jpg,然后电子邮件客户端显示图像正常。

如果有人有任何想法,他们会感激不尽!

0 个答案:

没有答案