လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP တွင် file_exontents ဖြင့် is_exutable ကိုအသုံးပြုသောအခါမည်သည့်ဘုံပြ problems နာများကြုံတွေ့ရသနည်း။ ဤပြ problems နာများကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း။

PHP တွင် file_exontents ဖြင့် is_exutable ကိုအသုံးပြုသောအခါမည်သည့်ဘုံပြ problems နာများကြုံတွေ့ရသနည်း။ ဤပြ problems နာများကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း။

gitbox 2025-06-12

is, is_exutable ()file_get_contents ()是 file_get_contents () 是 php 中两个看似简单但实用的函数။ is_exutable ()而, 而file_get_contents ()常用于读取文件或常用于读取文件或但当它们组合使用时, 但当它们组合使用时, 特别是在处理文件系统权限和远程资源时, 会遇到一些容易被忽略的问题။ 常用于读取文件或, 但当它们组合使用时, 特别是在处理文件系统权限和远程资源时, 会遇到一些容易被忽略的问题။ 本文将分析常见问题, 但当它们组合使用时, 特别是在处理文件系统权限和远程资源时, 会遇到一些容易被忽略的问题။

一, 常见问题分析

1.误用_Executable判断远程 URL

is_executable ()是专门用于检查本地文件是否可执行的函数။ 如果你尝试对一个 url 使用它, 例如: 例如:

 <span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'https://gitbox.net/scripts/remote-check.php'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_executable</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>);
}
</span></span>

这段代码会失败, 因为_executable ()只接受本地文件路径传入一个传入一个传入一个传入一个 front url 传入一个false并可能触发警告 .php 并不会解析 url 并不会解析, 因此这种写法逻辑上是错误的။

2

即使是本地文件, 在使用file_get_contents ()很多开发者以为很多开发者以为很多开发者以为很多开发者以为很多开发者以为很多开发者以为很多开发者以为 _ 很多开发者以为 _ 就表示一切正常就表示一切正常,但实际上, 如果文件仅具有执行权限 ( x ), 而没有读取权限 (r), 那么file_get_contents ( r ),

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'/usr/local/bin/script.sh'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_executable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
    </span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>); </span><span><span class="hljs-comment">// &#21487;&#33021;&#22833;&#36133;&#65292;&#25243;&#20986; warning</span></span><span>
}
</span></span>

在这种情况下, 建议先用_readable ()判断文件是否可读။

3.文件路径错误或文件不存在

很多时候路径错误并不会立刻暴露出来,尤其是在用is_executable()判断后接file_get_contents()的场景中。一个不存在的文件会导致is_executable()返回false ,可能不会产生任何提示,而file_get_contents()则可能抛出警告:

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'/path/to/missing-file'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_executable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
    </span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>); </span><span><span class="hljs-comment">// &#26681;&#26412;&#19981;&#20250;&#25191;&#34892;</span></span><span>
}
</span></span>

虽然代码不会出错执行, 但逻辑会悄悄 "失败", 使调试变得困难။

4.错误使用结合Allow_URL_FOPEN设置

如果你尝试通过 ur url 使用file_get_contents () , 而服务器的php.ini中关闭了Allow_url_fopen , 会直接导致无法读取远程内容, 即使 url 是有效的

<span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'https://gitbox.net/data/info.json'</span></span><span>;
</span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>); </span><span><span class="hljs-comment">// &#33509; allow_url_fopen = Off&#65292;&#21017;&#20250;&#22833;&#36133;</span></span><span>
</span></span>

这与_Executable ()无关, 但在组合使用时更容易造成混淆, 尤其是开发者误以为是尤其是开发者误以为是尤其是开发者误以为是尤其是开发者误以为是尤其是开发者误以为是尤其是开发者误以为是尤其是开发者误以为是尤其是开发者误以为是尤其是开发者误以为是造成的问题။

二, 如何避免这些问题, 如何避免这些问题?

? 明确分离本地与远程资源的处理逻辑

避免对 url 避免对_Executable () , 也不要试图对其进行任何与文件权限相关的判断။ 建议通过简单的正则或parse_url ()来判断资源类型:

 <span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-string">'https://gitbox.net/scripts/check.php'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>, FILTER_VALIDATE_URL)) {
    </span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>);
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_executable</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>) &amp;&amp; </span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>)) {
    </span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>);
}
</span></span>

? 使用_readable ()搭配is_executable ()

如果目标是本地文件,

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'/usr/local/bin/myscript.sh'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_executable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>) &amp;&amp; </span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
    </span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
}
</span></span>

? 捕获异常或使用错误控制

即使进行了判断, 仍可能发生错误 (比如文件在判断之后被删除) ။ @ @file_get_contents ()Try- catch_context_contexe () (尤其是远程读取时):

 <span><span><span class="hljs-variable">$content</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'https://gitbox.net/api/status.json'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$content</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"&#35835;&#21462;&#22833;&#36133;&#65292;&#35831;&#26816;&#26597;URL&#25110;&#32593;&#32476;&#37197;&#32622;"</span></span><span>);
}
</span></span>

? 检查 PHP 配置项

ur url 前, 请确认php.ini中的ခွင့်设置为 file_get_contents () 否则file_get_contents () 设置为 file_get_contents () 设置为။

 <span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ini_get</span></span><span>(</span><span><span class="hljs-string">'allow_url_fopen'</span></span><span>)) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"&#36828;&#31243;&#25991;&#20214;&#35835;&#21462;&#34987;&#31105;&#27490;&#65292;&#35831;&#20462;&#25913;php.ini&#37197;&#32622;"</span></span><span>);
}
</span></span>

三, 结语

虽然_executable ()file_get_contents ()在 phip 中都是基础函数, 但当两者组合使用时, 文件权限, php, php, php 配置等方面有更清晰的认识။ 通过明确分工, 合理判断, 提前配置检查, php, 提高代码的稳定性和可维护性။