我的一个PHP脚本想要写入日志文件夹,产生的错误是:
Unable to open the log file "E:\approot\framework\log/dev.log" for writing.
当我手动设置 WebRole 用户 RD001 的写入权限时,它工作正常。 现在我想自动设置文件夹权限。有没有一种简单的方法可以完成它? 请注意,我对 IIS 及其相关内容非常陌生,我希望得到准确的答案,谢谢。
最佳答案
简短/技术响应:
您可能可以使用完全信任和启动任务来设置特定文件夹的权限。但是,您需要考虑无状态操作系统并在此脚本中更改驱动器号(可能,不太可能),这会使事情变得困难。此外,本地存储不会持久保存,因此您无法确保在重新启动时保留这些数据。
建议:不要写本地内容,请阅读下文...
编辑:必须考虑这一点,虽然我仍然建议不要这样做,但还有第三个选项:您可以在服务配置中分配本地存储,然后使用 dll 引用从 PHP 访问它,然后您就可以访问到该文件夹。请记住,本地存储不会持久保存,因此在重新启动时它就会消失。
从 php 访问配置: http://phpazure.codeplex.com/discussions/64334?ProjectName=phpazure
<小时/>长/详细回复:
在 Azure 中,我们确实鼓励您将事物视为平台而不是“服务器上的软件”。我的意思是,诸如“将某些内容写入本地日志文件”之类的想法与云“想法”有些不兼容。根据您的使用情况,您可以(并且应该)转换此脚本以将此数据输出到某些基于云的或外部存储,而不是仅仅将其放置在磁盘上。
我建议修改此脚本以利用 PHP Azure SDK 并将这些日志条目写入 Azure 中的表或 blob 存储。如果这听起来不错,请提供 PHP,我可以给出一个确切的例子。
主要原因(除了插入云理念之外)是在 Azure 中,您不能假设主机(“角色实例”)将维护操作系统状态,因此虽然您可以设置一些内容,例如文件夹权限,你不能指望他们会坚持这样。当结构必须更新您的角色并对某些较低级别的问题使用react时,您没有真正的方法来保证这些权限不会被重置。例如,当前实例所在机架上的硬盘驱动器笼可能会发生故障。如果故障足够严重,Fabric Controller 将需要重建您的实例。当发生这种情况时,您的代码将被移动到完全不同的服务器,因此需要重新设置这些权限。另外,根据更改的情况,E:\可能会突然需要成为 F:\或 X:\驱动器,而您却不会知道。
最好(在某种程度上)假装您的应用程序正在“Azure 中”运行,而不是“在 Azure 中的服务器上”运行,这样您就无需对托管环境做出任何假设。因此,您在代码之外需要的任何内容(数据、日志、审核等)都应该存储在您可以控制的地方(Azure 存储、外部调出等)
关于WindowsAzure : Is it possible to set directory permissions within the web. 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5106179/