Я получаю ложь всякий раз, когда я использую функцию is_readable
для файла, совместно используемого моим хостом на виртуальной машине, ожидаемый результат верен.
Я делаю настройку локальной среды разработки для существующего проекта. Я не хочу использовать другую функцию, потому что это сложная унаследованная система, и я боюсь, что спрятал бы другие потенциальные проблемы, с которыми я столкнулся бы позже в процессе разработки.
Виртуальная машина настроена с использованием vagrant и virtualbox. ОС представляет собой компьютер под управлением Windows Server 2008 с Zend Server, на котором размещен код PHP 5.3, размещенный на хосте, который является Mac.
Общая папка создается следующим образом:
vmConfig.vm.synced_folder "/path/to/shared/folder/cms", '/cms', mount_options: ["dmode=775,fmode=664,type=smb"], owner: 'wcmadmin', group: 'wcmadmin'
Кусок кода пытается увидеть, доступен ли файл для чтения. is_readable
возвращает ложь Я запускаю скрипт через командную строку с обоими пользователями wcmadmin
а также Administrator
и я получаю те же результаты.
function smarty_core_assemble_plugin_filepath($params, &$smarty)
{
[...]
// try relative to cwd (or absolute)
if (is_readable($_plugin_filepath)) {
$_return = $_plugin_filepath;
break;
}
[...]
Я сделал тестовый скрипт, чтобы копать дальше:
echo 'is_readable: ';
var_export(is_readable('C:\cms\path\to\file\file.php'));
echo "\n";
echo 'require_once: ';
var_export(require_once('C:\cms\path\to\file\file.php'));
И у меня есть следующие результаты:
is_readable: false
require_once: true
С помощью file_get_contents
на файл возвращает содержимое правильно.
Используя cygwin, права доступа к файлу следующие:
$ ls -al C:\cms\path\to\file\file.php
-rw-r--r-- 1 wcmadmin None 1498 Apr 18 07:22 C:\cms\path\to\file\file.php
Путь к файлу был изменен с целью этого вопроса. Хотя они могут иметь некоторые расхождения, они корректно разрешаются во время реальных тестов.
Это ошибка в виртуальной коробке, и она все еще происходит с версии 5.0.18.
Других решений пока нет …