我在一个共享主机上(使用安全模式),我在创建PHP可以实际写入的目录时遇到了麻烦。假设我的帐号是matty
, apache的帐号是web
。
当我使用FTP上传脚本时,它们属于matty
,并且它们也在用户matty
下运行。但由于某种原因,如果我使用mkdir
或file_put_contents
来创建一个新目录或文件,它由用户web
拥有。安全模式阻止脚本向新目录添加文件,因为uid不匹配。web
帐户的存在对我来说毫无意义,因为我所有的脚本都在我自己的用户名下运行,只有当脚本创建自己的文件/dirs时才会出现。
我试过在创建后直接使用chown('directory', 'matty')
,但得到错误信息"不是所有者在…"。我只需要在当前执行脚本的用户名下创建文件和目录,或者一些硬编码的用户名。
您需要使用FTP客户端或shell将您的上传目录传输到web
。
从现在开始,PHP将可以在这个目录中写入内容。
这是唯一的方法(不需要关闭安全模式),因为这个PHP指令的目的是防止其他用户文件上的任何活动
我在没有ssh访问的共享主机上遇到了同样的问题&通过FTP的有限控制。应用程序(作为apache运行)无法在通过FTP上传的文件夹中创建文件(因此具有不同的所有者),而文件夹的权限不是777 -这是我不想要的。我用下面的步骤来解决这个问题:
1)通过FTP,创建一个文件夹&将其权限(临时)设置为777
2)使用PHP脚本,在第一个文件夹中创建第二个文件夹,权限设置为755。PHP写入第二个文件夹应该没有困难。3)返回并设置第一个文件夹的权限为755(通过FTP)
ta -不再有777个文件夹了,但是PHP可以写到一个文件夹。耶!