有一个需求是访问存储在群辉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" one rror="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到的文件内容输出到标准输出,以流的方式返回给前端。
标签:FTP,ftp,server,SSL,服务器,php,config,size From: https://www.cnblogs.com/caroline2016/p/18394614