При использовании PHPass ( http://www.openwall.com/phpass/ ) появляется следующее предупреждение:
open_basedir restriction in effect. File(/dev/urandom) is not within the allowed path(s)
Хотя это не большая проблема (она вернется к чему-то еще), я бы не хотел этого предупреждения. Приложение PHP должно запускаться на разных серверах, некоторые пользователи смогут добавить этот путь к разрешенным путям open_basedir, но другие не будут иметь доступа к этой конфигурации.
Сначала я предполагал проверить читаемость с помощью is_readable()
, однако я все еще получаю предупреждение.
Вопрос: Как проверить, был ли добавлен определенный путь или файл в пути open_basedir?
Вы можете прочитать значение директив PHP с помощью функции ini_get()
:
ini_get('open_basedir')
Если директива не пуста, она должна содержать строку с одним или несколькими путями, разделенными PATH_SEPARATOR
.
Вы можете использовать is_readable
и отключить предупреждение для этой функции с помощью @
.
Если is_readable
возвращает false, то вы знаете, что оно не читается.
$readable = @is_readable(..); if(!$readable) { ....not readable }
file_exists
выдает предупреждение, если каталог ограничен. Давайте использовать его:
function isRestricted( $path ) { // Default error handler is required set_error_handler( null ); // Clean last error info. You can do it using error_clean_last in PHP7. @trigger_error( '__clean_error_info' ); // Testing... @file_exists( $path ); // Restore previous error handler restore_error_handler(); // Return `true` if error has occured return ($error = error_get_last()) && $error[ 'message' ] !== '__clean_error_info'; }