You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Apache+PHP环境下NAS图片无法通过img标签显示的问题

问题原因

PHP作为服务器端脚本,能直接访问树莓派本地挂载的NAS路径/Volumes/Bilder/Test/,所以getimagesize可以正常读取图片信息。但浏览器是客户端,请求img标签的src时,会向Apache请求对应的资源——而/Volumes/...不在Apache的网站根目录范围内,Apache无法找到该文件,因此返回404错误。

解决方法

方法一:软链接挂载目录到网站根

  1. 确认Apache网站根目录(Raspbian默认是/var/www/html/)
  2. 创建软链接,将NAS图片目录映射到网站根:
    sudo ln -s /Volumes/Bilder/Test /var/www/html/nas-images
    
  3. 修改PHP代码中的img标签路径:
    print('<img src="/nas-images/P1020368.JPG" alt="testimage"><br/>');
    
  4. 确保权限正常:
    • 挂载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
      
  5. 检查Apache配置是否允许跟随软链接,编辑/etc/apache2/apache2.conf,确保对应目录的Options包含FollowSymLinks:
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Require all granted
    </Directory>
    
    修改后重启Apache:sudo systemctl restart apache2

方法二:PHP图片代理脚本

如果不想修改网站目录结构,可通过PHP脚本代理输出图片:

  1. 在网站根目录创建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);
    ?>
    
  2. 修改原PHP代码的img标签:
    print('<img src="get_image.php?img=P1020368.JPG" alt="testimage"><br/>');
    

内容的提问来源于stack exchange,提问作者Gerald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 20:12:09