最近,我在部署应用程序时遇到了一个错误。它在包含路径内的路径上使用"is_readable“,但受"open_basedir”的限制。这给了我一个致命的错误。在实际包含文件之前,我还可以使用另一个函数来查看文件是否可以包含吗?
编辑:这是可行的,但是如何检测错误是因为包含失败还是因为包含文件中的一些错误?
try {
include 'somefile.php';
$included = true;
} catch (Exception $e) {
// Code to run if it didn't work out
$included = false;
}发布于 2009-09-28 15:55:46
你可以“试试”这个;)
<?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仍然是正确的。
发布于 2009-09-28 13:29:45
可以使用以下方法检查open_basedir撤销的值(如果设置的话)
ini_get( 'open_basedir' );如果没有设置,它将返回允许的路径或空字符串。
编辑:
以open_basedir限制的安全方式检查包含路径可以这样做:
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;
}
}
}但是如果你看到捷径的话,可以自由地改进它。
发布于 2009-09-28 18:32:30
您可以尝试使用状态来达到与is_readable相同的效果,当基本dir设置时,我听说这是非常错误的。
https://stackoverflow.com/questions/1486918
复制相似问题