首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP is_readable与open_basedir的问题

PHP is_readable与open_basedir的问题
EN

Stack Overflow用户
提问于 2009-09-28 13:06:18
回答 3查看 1.8K关注 0票数 3

最近,我在部署应用程序时遇到了一个错误。它在包含路径内的路径上使用"is_readable“,但受"open_basedir”的限制。这给了我一个致命的错误。在实际包含文件之前,我还可以使用另一个函数来查看文件是否可以包含吗?

编辑:这是可行的,但是如何检测错误是因为包含失败还是因为包含文件中的一些错误?

代码语言:javascript
复制
try {
 include 'somefile.php';
 $included = true; 
} catch (Exception $e) {
 // Code to run if it didn't work out
 $included = false;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-28 15:55:46

你可以“试试”这个;)

代码语言:javascript
复制
<?php

function exceptions_error_handler($severity, $message, $filename, $lineno) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
set_error_handler('exceptions_error_handler');
try {
    include 'somefile.php';
    $included = true;
} catch (Exception $e) {
    // Code to run if it didn't work out
    $included = false;
}
echo 'File has ' . ($included ? '' : 'not ') . 'been included.';
?>

如果它不能工作,$included将被设置为true,然后在捕获中设置为false。如果确实有效,$included仍然是正确的。

票数 2
EN

Stack Overflow用户

发布于 2009-09-28 13:29:45

可以使用以下方法检查open_basedir撤销的值(如果设置的话)

代码语言:javascript
复制
ini_get( 'open_basedir' );

如果没有设置,它将返回允许的路径或空字符串。

编辑:

以open_basedir限制的安全方式检查包含路径可以这样做:

代码语言:javascript
复制
if ( strlen( ini_get( 'open_basedir' ) ) > 0 )
{
    $includeFile = 'yourInclude.php';
    $includePath = dirname( realpath( $includeFile ) );

    $baseDirs = explode( PATH_SEPARATOR, ini_get( 'open_basedir' ) );
    foreach ( $baseDirs as $dir )
    {
        if ( strstr( $includePath, $dir ) && is_readable( $includeFile ) )
        {
            include $includeFile;
        }
    }
}

但是如果你看到捷径的话,可以自由地改进它。

票数 1
EN

Stack Overflow用户

发布于 2009-09-28 18:32:30

您可以尝试使用状态来达到与is_readable相同的效果,当基本dir设置时,我听说这是非常错误的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1486918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档