每当我在VM上的主机共享的文件上使用函数is_readable
时,我都会收到错误,预期结果为true。
我正在为现有项目设置本地开发环境。我不想使用其他功能,因为它是一个复杂的遗留系统,我担心我会隐藏其他潜在的问题,我会在以后的发展中偶然发现。
使用vagrant和virtualbox设置VM。操作系统是一台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
返回false。我通过命令行运行脚本,用户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
出于此问题的目的,文件路径已更改。虽然它们可能存在一些差异,但在实际测试中它们会正确解决。