PHP页面通过URL传递图片链接后图片无法显示的问题求助
先看你的代码,这里有几个可能的点导致图片加载失败,我给你拆解一下:
引号缺失导致的HTML语法错误
你输出的<img src=$src>里,src属性值没有加引号,这会在URL包含特殊字符(比如&、空格、?)的时候解析出错。浏览器直接输URL能识别,但HTML里没引号的话,会把URL截断在第一个特殊字符处。修复方法很简单,给src加双引号:print "<img src=\"$src\">"; // 或者用单引号包裹HTML,双引号包变量,更清晰 print '<img src="' . $src . '">';SESSION验证问题
有没有可能$_SESSION['userName']并没有正确设置?比如你忘记在页面开头调用session_start()了?如果SESSION验证不通过,这段输出图片的代码根本不会执行,页面自然没图片。可以在代码开头加session_start();,或者临时去掉SESSION判断,测试图片是否能显示,排除这个因素。URL路径/协议问题
检查$src的内容:如果是相对路径,有没有可能当前页面的上下文和直接访问URL时的上下文不一样?比如当前PHP页面在/user/目录下,而图片URL是/images/1.jpg,相对路径的话就会变成/user/images/1.jpg,自然找不到。另外,如果直接访问用的是https,但输出的URL是http,浏览器可能会因为混合内容阻止加载,这种情况要确保$src的协议和当前页面一致。$_GET参数被转义或截断
有没有可能传递img参数的时候,URL被编码或者截断了?比如原图片URL里有特殊字符,传递时没做URL编码,导致$_GET['img']拿到的是不完整的内容。可以在输出前先打印var_dump($src);看看实际拿到的URL是什么,和你直接输浏览器的对比一下,是不是一致。浏览器缓存或渲染问题
有时候浏览器会缓存旧的页面内容,你可以按Ctrl+F5强制刷新页面,或者打开开发者工具(F12)看“网络”面板,查看图片请求的状态码:如果是403、404,说明路径或权限有问题;如果是200但图片不显示,可能是响应内容不对;如果根本没有图片请求,说明代码没执行到输出图片的部分。
内容的提问来源于stack exchange,提问作者user4540741

