我正在研究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);
Bottomline是我想强制调整大小的下载链接 图像,一旦调整完成。
努力和更新:
First update
:我正按照this article on forced-download-links的建议正在审核another relevant thread on 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,相应地更改了代码。问题仍然存在。
第四次更新:按照this thread中的解决方案中的建议尝试了此代码。同样的结果,打印出乱码而不是提供下载链接。这令人沮丧,我必须越来越近:)。
最终更新:有javascript解析脚本的输出,所以我得到了所有的胡言乱语。我删除它现在一切都好。
答案 0 :(得分:1)
我认为一个解决方案是在强制下载之后使用imagejpeg()将图像保存在服务器中,并删除文件,你会得到类似这样的文件:
$img = imagejpeg($resource, $file);
$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); //to delete the file that you generated
其中$ file是删除该文件的unlink
函数的文件路径。
你也可以像这样直接下载:
header("Content-Disposition: attachment; filename=\"titleimg\";");
header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
此致