Linux 如何在Windows主机上以区分大小写的方式处理Vagrant中的文件

Linux 如何在Windows主机上以区分大小写的方式处理Vagrant中的文件,linux,windows,virtual-machine,vagrant,virtualbox,Linux,Windows,Virtual Machine,Vagrant,Virtualbox,在我的Windows8上,我安装了VirtualBox+Vagrant。我用它当盒子。在这个虚拟机上运行站点或运行命令行时,我希望它是在Linux上运行的,而不是在Windows上运行的。但我发现了一些奇怪的问题: 首先,我的文件夹映射: folders: - map: D:\DaneAplikacji\easyphp\data\localweb\projects\testprovag\strony to: /home/vagrant/code sites: - m

在我的Windows8上,我安装了VirtualBox+Vagrant。我用它当盒子。在这个虚拟机上运行站点或运行命令行时,我希望它是在Linux上运行的,而不是在Windows上运行的。但我发现了一些奇怪的问题:

首先,我的文件夹映射:

folders:
    - map: D:\DaneAplikacji\easyphp\data\localweb\projects\testprovag\strony
      to: /home/vagrant/code

sites:
    - map: learn.app
      to: /home/vagrant/code/my-first-app/public
当我在浏览器中运行时
http://learn.app:8000
我从
/home/vagrant/code/my first app/public
获得了正确的输出-页面与
D:\DaneAplikacji\easyphp\data\localweb\projects\testprovag\strony\my first app/public
中的代码相同

现在问题来了:

在我的
public
文件夹中,我创建了两个简单文件:

文件名
test
(为空),文件
index.php
包含内容:

<?php 

if (file_exists('TEST')) {
    echo "file exists";
}
else {
    echo "file NOT exists";
}

使用默认的vagrant共享,您使用的挂载文件夹仍然由底层文件系统提供。它也无法正确处理linux ACL


我们找到的一个解决方案不是与客户机共享主机文件夹,而是在客户机上设置samba并将其共享回主机。它更麻烦,您必须进行更多的配置,但至少您的应用程序运行在一个应该很有趣的环境中。我将Windows7与Homestead一起使用——我还假设区分大小写的文件问题将由Vagrant处理。但是我运行了一些类似的测试——你是对的——它实际上是不区分大小写的

我可以确认问题与PHP完全无关-问题实际上发生在命令行本身的Vagrant中:

touch EXAMPLE
rm example
当我进入流浪者的盒子时,它会传递给我。但是在一个真正的Ubuntu盒子上(我在我的服务器上测试过),这个命令失败了

原因是Vagrant正在调用Windows以检查映射文件夹的文件是否存在。但是,如果你在Vagrant中创建了一个虚拟的非映射文件夹,那么查看文件是否存在的“调用”仍然在Vagrant中,因此只能由Ubuntu处理,这就是你的另一个测试通过的原因


我曾尝试为Windows 7 as启用区分大小写功能,但没有解决问题

我认为这个问题可以通过不使用Samba或做太多工作来解决

在Windows
cmd
I中运行:

vagrant plugin install vagrant-winnfsd
它安装了一个,尽管您清楚地知道NFS不适用于Windows:

Windows用户:NFS文件夹在Windows主机上不工作。Vagrant将忽略您对Windows上NFS同步文件夹的请求

我修改了我的
homestad.yaml
文件映射,源于:

folders:
    - map: D:\DaneAplikacji\easyphp\data\localweb\projects\testprovag\strony
      to: /home/vagrant/code
致:

(如果不使用Homestead.yaml,可能您可以在
vagrant文件中添加
type:nfs
,类似于:
config.vm.synced_文件夹“,“/vagrant”,键入:“nfs”

现在当我跑的时候

vagrant up

我收到了2到3条关于管理员密码的通知(可能是NFS的某些Windows配置-只有在添加NFS类型后首先运行
vagrant up
时才会显示)但现在两者都用于使用url
http://learn.app:8000
我从问题
中得到的案例文件不存在
在box命令行中运行
php index.php
时也是如此


注意:此解决方案不会使您可以在同一目录中创建
test
test
文件,并将它们保存在文件系统中。它似乎以区分大小写的方式处理文件,因此,如果您在应用程序中以错误的大小写创建了一个文件(以及稍后在您希望加载它/需要的代码中),您将注意到它在您的Vagrant Linux box上不起作用(并且它在Windows WAMP上起作用,并且在继续生产时您会感到惊讶)。

,那么你是说PHP知道文件
test
在Windows文件系统上,在这种情况下,它不在乎我是写
test
test
还是
test
?我希望使用Vagrant+VirtualBox将完全按照在Linux Web服务器上运行的方式处理文件,因为文件也存在于Linux文件系统(Windows和Linux之间的同步)不,PHP不知道。但所有文件系统函数实际上都是对文件系统的调用。它将执行系统调用以获取文件是否存在。它不需要知道它是什么类型的文件系统,只要它支持POSIX(我想),但PHP将取决于文件系统的答案。虽然它解决了文件敏感问题,但我无法再运行
phpunit
——当我尝试运行它时,我不断收到
输入/输出错误。
phpunit
是否适用于此解决方案?@Shift Exchange在主机(Windows)上运行
phpunit StackTest.php
(使用Windows安装的php)和Linux(
vagrant ssh
php phpunit.phar StackTest.php
)时,我得到测试失败的标准phpunit响应,因此,它似乎工作没有问题。你确定之前它工作正常吗?是的。我卸载了该软件包,删除了“nfs”,现在它又可以工作了。在接下来的几天里,我会再处理一些,并让你知道——可能有一个解决方案。
folders:
    - map: D:\DaneAplikacji\easyphp\data\localweb\projects\testprovag\strony
      to: /home/vagrant/code
      type: "nfs"