作为一名全职 Web 开发人员,我不断向我的 Windows 7 HOSTS 文件添加虚假域名,以将域名指向我在其上开发的本地主机 Web 服务器。
我甚至编写了一个不错的 PHP 脚本,可以让我输入想要创建的域名,例如测试.dev
然后我的脚本创建...
- 我的服务器目录中适合这个新网站的文件夹
- Apache 中的 VirtualHosts 记录(实际上使用 Wildcard 设置 /projects/testing.dev/www/)
- 创建 MySQL 数据库
testing.dev
并将 MySQL 用户关联到这个新数据库 - 最后,我有一个小的 .EXE 文件,它传递了一个变量“测试”,然后它编辑我的 Windows HOSTS 文件并在新行上添加一个条目,如下所示...127.0.0.1 测试.dev然后我就可以通过浏览器访问我的新项目网站http://testing.dev
在过去的两年里,这个设置一直运行良好,但最近我的 .EXE 程序停止工作了……经检查,如果我浏览到该文件夹C:\Windows\System32\drivers\etc
并查看此文件夹中文件的属性hosts
,我看到的第一个问题是只读复选框被选中,这不允许我的简单 exe 程序修改 hosts 文件并添加我的新条目。
然后我必须取消选中只读并手动添加我的新主机文件更改并保存,然后就可以正常工作了。拥有一个接受 1 个参数(域名)的自定义 .exe 程序的全部目的是能够构建这样的脚本来自动编辑我的主机文件并将其纳入工作流程,就像我所做的那样。
每次我通过取消选中只读属性并应用/保存它来更改此设置时,几分钟之内它似乎就恢复到被选中的状态!
我将非常感激任何帮助,使我的未检查状态保持不变,有任何想法,建议,甚至更好的真正解决方案吗?
另外要说的是,我没有任何类型的防火墙或安全程序可以执行此操作,也没有运行会导致这种情况的第三方程序。
谢谢你的帮助
答案1
也许这个问题是因为其他程序正在这样做。我建议清除所有临时文件,看看这是否能解决问题。希望这能有所帮助,否则可能是注册表中的问题。
答案2
尝试使用 CMD 更改属性。使用命令提示符以安全模式启动计算机。
类型
cd C:\Windows\System32\drivers\etc (按回车键)
属性 C:\Windows\System32\drivers\etc\hosts -r(按回车键)
进一步检查您的文件是否显示只读检查
答案3
我无法测试这是否确实有效,因为对我来说该文件没有像您的情况一样标记为只读,但这是我用来防止 Windows 将我对受slui.exe保护的文件的更改恢复的方法。
您需要修改文件的权限,拒绝 SYSTEM 和可能的 TrustedInstaller 的访问(但不包括您自己)。您可能需要让自己成为文件的所有者才能执行此操作。
转到属性 > 安全 > 高级 > 更改权限
然后编辑 SYSTEM 的权限并选中拒绝写入属性/扩展属性。如果这不起作用,您可以尝试拒绝其完全控制,但风险自负。
如果您需要拥有文件的所有权才能执行任何操作,则可在属性>安全>所有者>编辑中进行
最后,作为最后的手段,您可以让程序在修改文件时取消只读标记。我不懂 PHP,所以我无法提供帮助。您可以尝试 Stephen 的回答中建议的命令。
答案4
也许这不是一个严格的答案,但我认为你正在尝试重新回到井中:)
安装 laragon(https://laragon.org/)作为你的 wamp 服务器(而不是 apache/php 或你那里有的)
Laragon 已经解决了这个问题(对于您在项目中创建的任何文件夹,都会自动为其创建 fakedomain)
我也是一名 php 开发人员,相信我,所有与 apache/php 扩展/php 版本和 .local 域名有关的问题都已在 laragon 上得到解决