Поведение функции glob в php отличается от open_basedir - PullRequest
2 голосов
/ 09 февраля 2012

Я мигрирую с сахара 5.2 на сахар CRM 6.2, и я использую open_basedir, и он не работает ...

Я обнаружил проблему в коде. Это функция glob, которая возвращает false (с open_basedir) вместо пустого массива (с отключенным open basedir)

Файл с проблемой: modules / ModuleBuilder / parsers / views / History.php строка 72.

foreach (glob($this->getFileByTimestamp('*')) as $filename)
        {
             if(preg_match('/(\d+)$/', $filename, $match)) {
                $this->_list [] = $match[1];
             }
        }

(если glob возвращает null, возникает ошибка)

Когда я ищу документацию по glob http://fr2.php.net/glob,, появляется флаг * GLOB_ERR *: Остановка при ошибках чтения (например, нечитаемые каталоги), по умолчанию ошибки игнорируются.

Но это не меняется, результат ложен, и я не ошибаюсь.

Конфигурация open base dir разрешает путь приложения, / tmp и / usr / share

Кто-нибудь знает, как решить эту проблему без изменения кода (или как добавить код безопасности обновления)

Редактировать

Путь, который просматривает функция glob, находится внутри пути open basedir, он находится в каталоге sugarcrm. Функция glob возвращает false только в том случае, если нет соответствующего файла (поведение без открытой базовой директории для того же случая: пустой массив). Когда в обоих случаях есть файлы, он возвращает заполненный массив.

1 Ответ

2 голосов
/ 09 февраля 2012

Прочтите об этой ошибке https://bugs.php.net/bug.php?id=47358

Возможное решение:

$temp = glob($this->getFileByTimestamp('*'));
if (is_array($temp))
foreach ($temp as $filename)
        {
             if(preg_match('/(\d+)$/', $filename, $match)) {
                $this->_list [] = $match[1];
             }
        }
...