我正在开发一个 wordpress cms。我有一个简单的 php 脚本,它基本上将上传的图像调整到指定的限制,并将调整后的图像输出回访问者的浏览器,这样他就可以右键单击下载。下面给出的是脚本的相关部分,但如果需要,我将提供完整的代码。
ob_start();
imagejpeg($new, null, 100);
echo '<img src="data:image/jpeg;base64,' . base64_encode(ob_get_clean()) . '">';
echo '<br><br>RIGHT CLICK AND SAVE IMAGE<br><br>';
imagedestroy($new);
底线是,一旦调整大小完成,我想强制调整大小图像的下载链接。
努力和更新:
First update
:我目前正在阅读这篇关于强制下载链接的文章,正如SO 上另一个相关线程中所建议的那样。但是当它说 - “首先……我们需要在 PHP 中定义文件的路径(作为字符串)。”时,我感到很震惊。问题是,因为我不想在我的服务器上保存任何图像文件,所以imagejpeg()函数的第二个参数设置为NULL
. 所以我无法定义我的文件的路径。或者我可以吗?我该怎么做呢。希望它简洁明了。一个解决方案会很棒,如果不是,请给我很好的起点。
Second update
: 根据下面的建议,我已经取得了一些进展。正如您在下面的代码中看到的,我现在可以保存图像,但我仍然无法将输出图像作为下载提示回显。请提出更正建议。
$filename = uniqid();
$file = 'uploads/'.$filename.'.jpeg';
$final_image = imagejpeg($new, $file, 100);
$size = filesize($file);
header("Content-Type: application/force-download; name=\"" . basename($file). "\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
readfile($file);
unlink($file);
Third Update
: 发现我可以使用相对路径,所以我不需要加载 wordpress load.php,相应地更改了代码。问题仍然存在。
第四次更新:按照此线程中的解决方案中的建议尝试了此代码。同样的结果,打印出乱码而不是提供下载链接。这越来越令人沮丧,我必须接近:)。
最终更新:有 javascript 解析脚本的输出,所以我得到了所有的胡言乱语。我删除它现在一切正常。