Ошибка PHPass: имя функции должно быть строкой - PullRequest
1 голос
/ 22 ноября 2011

Я получаю эту ошибку с PHPass:

Предупреждение: is_readable (): действует ограничение open_basedir. Файл (/ dev / urandom) находится за пределами допустимого пути: (/customers/example.com/example.com/httpd.www:/customers/example.com/example.com/httpd.private:/customers/example.com/example.com/tmp:/customers/example.com /example.com:/var/www/diagnostics:/usr/share/php) в /customers/example.com/example.com/httpd.www/example/scripts/PasswordHash.php в строке 51 Фатальная ошибка: имя функции должно быть строкой в /customers/example.com/example.com/httpd.www/example/register.php в строке 82

Строки 51-54 на PasswordHash.php (PHPass):

    if (is_readable('/dev/urandom') &&
        ($fh = @fopen('/dev/urandom', 'rb'))) {
        $output = fread($fh, $count);
        fclose($fh);

Строки 81-84 файла register.php (также включая: первые две строки - это require и $ hasher):

require('scripts/PasswordHash.php');
$hasher = new PasswordHash(8, false);
$hash = $hasher->HashPassword($pw);
if($strlen($hash) < 20){
    $notice[] = "Error";
}

Итак, что означает эта ошибка?

1 Ответ

3 голосов
/ 30 декабря 2011

Ограничение open_basedir - это мера безопасности в PHP, в основном ограничивающая доступ к файловой системе определенными каталогами. Это полезно в общей среде, где каждый должен иметь доступ только к своим файлам. По умолчанию разрешено открывать все файлы.

В этом случае phpass пытается получить доступ к /dev/urandom, который не включен в ваши разрешенные каталоги, вызывая ошибку. Исправление состоит в том, чтобы изменить настройки для open_basedir в вашем php.ini, чтобы разрешить /dev/urandom (или разрешить все).

Версия 1.8 phpass решает эту проблему , подавляя ошибку:

Изменения с версии 1.7: +2 -2 строки:

Префикс is_readable () с "@" для подавления предупреждения, когда open_basedir ограничение действует.

...