树莓派Apache+PHP环境下NAS图片无法通过img标签显示的问题
问题原因
PHP作为服务器端脚本,能直接访问树莓派本地挂载的NAS路径/Volumes/Bilder/Test/,所以getimagesize可以正常读取图片信息。但浏览器是客户端,请求img标签的src时,会向Apache请求对应的资源——而/Volumes/...不在Apache的网站根目录范围内,Apache无法找到该文件,因此返回404错误。
解决方法
方法一:软链接挂载目录到网站根
- 确认Apache网站根目录(Raspbian默认是
/var/www/html/) - 创建软链接,将NAS图片目录映射到网站根:
sudo ln -s /Volumes/Bilder/Test /var/www/html/nas-images - 修改PHP代码中的
img标签路径:print('<img src="/nas-images/P1020368.JPG" alt="testimage"><br/>'); - 确保权限正常:
- 挂载CIFS时指定Apache运行用户(
www-data)权限,挂载命令示例:sudo mount -t cifs //NAS_IP/共享名 /Volumes/Bilder -o username=NAS用户名,password=NAS密码,uid=www-data,gid=www-data - 或者调整目录权限:
sudo chmod -R 755 /Volumes/Bilder/Test
- 挂载CIFS时指定Apache运行用户(
- 检查Apache配置是否允许跟随软链接,编辑
/etc/apache2/apache2.conf,确保对应目录的Options包含FollowSymLinks:
修改后重启Apache:<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory>sudo systemctl restart apache2
方法二:PHP图片代理脚本
如果不想修改网站目录结构,可通过PHP脚本代理输出图片:
- 在网站根目录创建
get_image.php,内容如下:<?php // 安全校验:仅允许指定目录下的文件 $allowedDir = "/Volumes/Bilder/Test/"; $imageName = basename($_GET['img']); $imagePath = $allowedDir . $imageName; if (!file_exists($imagePath) || !is_file($imagePath)) { header("HTTP/1.0 404 Not Found"); exit; } // 输出图片内容 $mime = mime_content_type($imagePath); header("Content-Type: $mime"); readfile($imagePath); ?> - 修改原PHP代码的
img标签:print('<img src="get_image.php?img=P1020368.JPG" alt="testimage"><br/>');
内容的提问来源于stack exchange,提问作者Gerald
相关产品推荐
相关产品推荐

