我有一个网站,允许用户浏览图像并购买这些图像的打印件。该网站在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
,然后电子邮件客户端显示图像正常。
如果有人有任何想法,他们会感激不尽!