我的PHP脚本想要写入日志文件夹,结果错误是:
无法打开日志文件“E:\ approot \ framework \ log / dev.log”进行编写。
当我手动设置WebRole用户RD001的写入权限时,它可以正常工作。 现在我想自动设置文件夹权限。有没有简单的方法来完成它? 请注意,我对IIS和周围的东西都很陌生,我希望得到精确的答案,谢谢。
答案 0 :(得分:4)
简短/技术响应:
您可以使用完全信任和启动设置来设置特定文件夹的权限。但是,您需要在此脚本中考虑无状态操作系统和更改驱动器号(可能,不太可能),这将使其变得困难。此外,本地存储不会保留,因此您无法确保在重新启动时保留此数据。
推荐:不要写本地,请阅读以下内容......
编辑:考虑到这一点,虽然我仍然建议不要这样做,但有第三个选项:您可以在服务配置中分配本地存储,然后使用dll引用从PHP访问它,然后您将有权访问到那个文件夹。请记住,本地存储不会保留,因此在重新启动时它已经消失。从php访问配置: http://phpazure.codeplex.com/discussions/64334?ProjectName=phpazure
长/详细回复:
在Azure中,我们鼓励您作为平台而不是“服务器上的软件”来处理事物。我的意思是,诸如“将内容写入本地日志文件”之类的想法与云“想法”有些不相容。根据您的使用情况,您可以(并且应该)转换此脚本以将此数据输出到某些基于云的存储或外部存储,而不是将其放在磁盘上。
我建议修改此脚本以利用PHP Azure SDK并将这些日志条目写入Azure中的表或blob存储。如果这听起来不错,请提供PHP,我可以给出一个确切的例子。
除了推动云计算之外,其主要原因是在Azure中,您不能假设主机(“角色实例”)将维持操作系统状态,因此您可以设置一些内容,例如文件夹权限,你不能依靠他们这样坚持。当结构必须更新您的角色并对某些较低级别的问题做出反应时,您没有真正的方法可以保证不会重置这些权限。例如,当前实例所在的机架上的硬盘驱动器笼可能会失败。如果故障足够严重,Fabric控制器将需要重建您的实例。当发生这种情况时,您的代码将被移动到完全不同的服务器,因此需要重新设置这些权限。此外,根据更改,E:\可能突然需要是F:\或X:\驱动器,你不会知道。
更好地假装(在某种程度上)您的应用程序在“Azure”中运行而不是“在Azure上的服务器上”,因此您不会对托管环境做出任何假设。因此,您需要在代码之外的任何内容(数据,日志,审计等)应存储在您可以控制的地方(Azure存储,外部呼出等)