Mac下以_www用户运行RecursiveDirectoryIterator报Permission denied错误求助
解决思路
- 修复上层目录执行权限
你当前small_set目录本身的权限配置没有问题,但它的上级目录/Users/jmlockl2/Desktop权限为drwx------,仅允许属主jmlockl2访问,_www用户没有进入该目录的权限(Unix系统下目录的x权限代表可进入遍历)。执行以下命令给上层目录开放其他用户的进入权限即可:
chmod o+x /Users/jmlockl2 /Users/jmlockl2/Desktop
该配置不会让其他用户看到你桌面的其他文件,仅允许进入目录访问已明确开放权限的子目录,安全性较高。
调整Mac系统隐私权限
MacOS 10.15 Catalina及以上版本对桌面、文档、下载等用户目录有额外的隐私访问限制,即使POSIX权限配置正确,未授权的程序也无法访问。操作步骤:
打开「系统设置」→「隐私与安全性」→「全磁盘访问」,将你使用的终端工具(Terminal/iTerm2)和PHP可执行文件添加到列表中,勾选授权后重启终端即可。(更推荐)迁移文件到公共访问目录
如果你不想修改个人目录的权限配置,可以将small_set目录移动到系统公共目录/Users/Shared/下,该目录默认允许所有用户访问,迁移后重新配置目录权限为_www所有即可,避免修改个人目录权限带来的安全风险。验证权限配置是否生效
修改配置后可以先通过命令行直接验证_www用户的访问权限,不用跑PHP脚本排查问题:
sudo -u _www ls /Users/jmlockl2/Desktop/small_set
如果该命令可以正常输出目录内容,再执行PHP脚本即可正常运行。
内容的提问来源于stack exchange,提问作者Mark Locklear
相关产品推荐
相关产品推荐

