我正在尝试从FTP服务器获取图像并在以后打印而不将其保存在本地。我的问题是,图像可能是某种加密形式,或者说是二进制文件,说实话我也不知道。
到目前为止,这是我确实拥有的代码:
if(ftp_get($this->connection, "php://output", "web/media/images/".$imageName, FTP_BINARY)){
$data = ob_get_contents();
$dataSize = ob_get_length();
ob_end_clean();
return array('data' => $data, 'size' => $dataSize);
}else{
return false;
}
}
这是我从文件中调用的一个对象内部的方法,这是我尝试显示图像的代码。
该行用于获取图像(调用上面的函数),但这是一个不同的PHP文件!这是一个视图文件。
$ftpM = new FTPManager();
$image = $ftpM->getImagePreview($imageName);
在这里,我尝试打印图像。
<img class="materialboxed" width="650" src="<?php echo $image["data"]; ?>"/>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从FTP服务器获取图像并在不将其保存到本地磁盘的情况下直接显示,你的方法是正确的。你使用了php://output
作为目标文件名来捕获FTP流并输出到浏览器,同时设置模式为FTP_BINARY
以确保正确处理二进制文件(如图像)。以下是对你的代码的一些建议和改进:
确保FTP连接正常:在调用ftp_get()
之前,请确认$this->connection
已经成功建立到FTP服务器的连接。
直接输出图像内容:既然你已经在获取图像的方法中读取到了图像的二进制数据,并存储在$data
变量中,你不需要再将这些数据存入数组返回,而是可以直接在视图文件中输出这些数据给客户端浏览器。修改视图文件中的代码如下:
<?php
$ftpM = new FTPManager();
$imageData = $ftpM->getImagePreview($imageName);
if ($imageData !== false) {
header('Content-Type: image/jpeg'); // 假设是JPEG格式,根据实际情况调整MIME类型
echo $imageData['data'];
exit; // 确保输出后结束脚本
} else {
echo "Failed to get the image.";
}
?>
注意MIME类型:在输出图像前,通过header()
函数设置正确的MIME类型是非常重要的,这告诉浏览器它即将接收的是哪种类型的文件。如果你的图片不是JPEG格式,需要相应地更改MIME类型(例如PNG为'image/png')。
错误处理:在实际应用中,增加详细的错误处理逻辑会很有帮助,比如在FTP操作失败时记录或返回具体的错误信息。
资源管理:虽然你的代码没有显式地打开输出缓冲区(ob_start()
),但php://output
隐式地使用了它。你已经正确地使用了ob_end_clean()
来清理缓冲区,这是好的实践,避免了潜在的内存泄漏问题。
按照上述建议调整后,你应该能够直接在浏览器中显示从FTP服务器获取的图像,而无需将其保存到本地文件系统。