PHP 中远程图像文件存在性检查
在 Web 开发中经常需要验证远程图像文件是否存在,通常会使用内容交付网络 (CDN)。然而,传统的 file_exists 方法在应用于远程位置时可能无法正常工作。本文调查了此问题背后的原因并提出了解决方案。
问题:
使用 file_exists 远程访问图像文件始终会产生积极的结果,无论图像是否存在或不。以下代码演示了此行为:
<code class="php">if (file_exists('http://www.example.com/images/$filename')) { echo "The file exists"; } else { echo "The file does not exist"; }</code>
解决方案:
要纠正此问题,请将文件名括在引号中(作为字符串):
<code class="php">if (file_exists('http://www.mydomain.com/images/' . $filename)) { … }</code>
此外,请确保 $filename 变量已正确验证。
技术说明:
file_exists 函数默认在本地文件系统上运行。当应用于远程 URL 时,它依赖于 PHP 的allow_url_fopen 配置设置,该设置通常出于安全原因而被禁用。禁用此设置时,file_exists 对于远程 URL 将始终返回 false。
将文件名括在引号中会强制 PHP 将其视为字符串,从而防止将其解释为远程 URL。这允许该函数绕过allow_url_fopen限制并正确执行检查。
请注意,启用allow_url_fopen可能会引入安全漏洞,因此在激活它之前必须仔细考虑其影响。
以上是为什么 `file_exists` 不适用于 PHP 中的远程图像?的详细内容。更多信息请关注PHP中文网其他相关文章!