php获取FTP服务器中文件内容返回给前端

news/2024/9/20 16:25:19/文章来源:https://www.cnblogs.com/caroline2016/p/18394614

有一个需求是访问存储在群辉Synology NAS上的图片,https://ip:port/path/to/image.jpg,用浏览器打开会出现“您的连接不是私密/安全连接”错误。

网上检索资料发现可能是因为缺少SSL证书的关系。

引用 https://www.cloudflare-cn.com/learning/ssl/connection-not-private-explained/  中的内容介绍:

此错误是由网站的 SSL 证书(丢失、过期或并非由合法证书颁发机构颁发)导致,或者是客户端由于其他原因无法访问它。对于通过安全的 HTTPS 连接提供网站服务而言,SSL 证书是必需的。没有 SSL 证书的网站无法证明其身份,无法加密通信。

 

不知什么缘故,NAS没有配置或者没有办法使用http访问。最终确定了使用FTP访问的方式。

按照之前使用FTP的方式,将文件从远程图片server下载下来存储在后端server,然后将文件地址返回给前端访问。然而,图片下载到后端server几乎不会复用,还会浪费server空间,就要看下有没有办法把文件内容直接返回给前端。然后就找到了这种写法,记录下:

test.html

<img src="http://localhost:3000/test.php" onerror="this.src='images/nopicture.jpg'" />

test.php

<?php$remote_file = "/path/to/img.jpg";
$ftp_config = ['ip' => '','port' => '','username' => '','password' => '','timeout' => 10
];
$ftp = ftp_connect($ftp_config['ip'], $ftp_config['port'], $ftp_config['timeout']);
if ($ftp) {$login_result = ftp_login($ftp, $ftp_config['username'], $ftp_config['password']);if ($login_result) {ftp_pasv($ftp, true);$size = ftp_size($ftp, $remote_file);if ($size > 0) {header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=" . basename($remote_file));header("Content-Length: $size");ftp_get($ftp, 'php://output', $remote_file, FTP_BINARY);ftp_close($ftp);}}
}

将ftp_get到的文件内容输出到标准输出,以流的方式返回给前端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791653.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源问卷调查和考试系统 SurveyKing 安装和使用教程

最近公司又要搞什么满意度调查了,我这个小菜鸟又要头疼了。上次用那个破系统,界面丑不说,功能还少得可怜,搞得我加班到半夜。这回非得找个好用的不可。 正发愁呢,突然想起来前两天同事小王推荐了一个叫 “卷王” 的开源系统,这名字挺有意思的,我还以为是什么 “卷王” 专…

洛谷题单指南-常见优化技巧-唯一的雪花 Unique Snowflakes

原题链接:https://www.luogu.com.cn/problem/UVA11572 题意解读:本质上是要计算最长连续不重复子序列的长度,典型的双指针应用。 解题思路: 通过双指针来枚举子序列,右指针指向的元素每次记录元素出现的次数,可以借助hash数组h[] 如果枚举到的元素出现次数超过1,则表示左…

BSW之——CAN

CAN总线协议 一、简介 CAN: 控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。 该协议的…

YUV(NV12)与NHWC(BGRA)图像格式之间的区别联系

NV12是一种视频编码格式,属于YUV颜色空间的一种采样方式。 以下是关于NV12格式的具体介绍:YUV色彩空间:在数字图像处理中,YUV色彩空间将彩色图像分为亮度信息(Y)和色度信息(U、V)。这种分离使得图像处理更为灵活,尤其是在视频压缩和传输中非常有用。4:2:0采样:YUV 4:…

基于MATLAB的SEIR传染病模型建模与仿真

1.课题概述SEIR传染病模型是一种用于描述传染病传播过程的数学模型。这个模型将人群分为四类:易感者(Susceptible)、暴露者(Exposed)、感染者(Infectious)和康复者(Recovered),通过这四类人群之间的转化关系,来描述传染病的传播过程。通过matlab将这个过程进行建模与…

编译安装nginx并部署代码

1.编译安装nginx 编译安装:三部曲配置(configure),编译(make),安装(make install) 配置(configure) 指定安装目录 编译(make) 源代码---编译工具-->可执行文件(命令) 安装(make install) 根据第1步骤的配置,创建目录,复制文件,复制目录.1.1 Kylin_v10_sp3安装 [root@Kylin-V…

编译安装ngx并部署代码

1.编译安装nginx 编译安装:三部曲配置(configure),编译(make),安装(make install) 配置(configure) 指定安装目录 编译(make) 源代码---编译工具-->可执行文件(命令) 安装(make install) 根据第1步骤的配置,创建目录,复制文件,复制目录.1.1 Kylin_v10_sp3安装 [root@Kylin-V…

美团一面:Spring Cloud 远程调用为啥要采用 HTTP,而不是 RPC?

作者:简简单单神经蛙 来源:blog.csdn.net/m0_61878423/article/details/124607067 关于SpringCloud远程调用采用HTTP而非RPC。 1、首先SpringCloud开启Web服务依赖于内部封装的Tomcat容器,而今信息飞速发展,适应大流量的微服务,采用Tomcat处理HTTP请求,开发者编写Json作…

zabbix“专家坐诊”第254期问答

问题一 Q:老师,我重启zabbix-server服务,恢复正常了,然后过了一两分钟再刷新,有报这个错了。我看zabbix-server日志里没什么有用的信息。A:selinux 关闭一下 Q:是关闭状态 A:看看server 自监控有没有 报错提示,看看有没有什么指标是超过触发器的 Q:没有报错,看起来内…

解决 Exchange 发到邮件组报错 550 5.1.1 User unknown (in reply to RCPT TO command)

版本 2010 只需要关闭:要求所有发件人通过身份验证 位置: Exchange 管理控制台收件人配置通讯组XXX组属性邮件流设置邮件传递设置[√]要求所有发件人通过身份验证取消勾选,再点确定即可参考资料: https://portal.thobson.com/knowledgebase/427/550-511-User-unknown--How-…

Exchange 2016部署实施案例篇-03.Exchange部署篇(中)

上一章《Exchange 2016部署实施案例篇-03.Exchange部署篇(上)》我们对部署Exchange Server 2016的先决条件做了简单的讲解,接下来我们进入先决条件准备工作。 先简单说下环境:服务器名称IP地址系统作用ADSrv01 192.168.1.10 Win2016 GC(已部署完成)ADSrv02 192.168.1.20 Wi…

SpringBoot——关于banner

springboot启动后,控制台会打印一个图案出来,这个图案就叫banner,如果不配置的话打印的是springboot默认的banner 几个可以的生成banner的网址: https://bootschool.net/ascii https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type Something