is_readable()返回false,而require_once返回true

时间:2016-04-20 15:16:13

标签: php vagrant virtualbox windows-server-2008 zend-server

每当我在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。我通过命令行运行脚本,用户wcmadminAdministrator,我得到相同的结果。

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

出于此问题的目的,文件路径已更改。虽然它们可能存在一些差异,但在实际测试中它们会正确解决。

1 个答案:

答案 0 :(得分:0)

这是虚拟框中的一个错误,从版本5.0.18开始仍在发生。

请参阅: https://www.virtualbox.org/ticket/11675