首页  >  文章  >  后端开发  >  为什么 `file_exists` 不适用于 PHP 中的远程图像?

为什么 `file_exists` 不适用于 PHP 中的远程图像?

DDD
DDD原创
2024-10-31 23:12:28904浏览

Why Doesn't `file_exists` Work For Remote Images in PHP?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn