我有一个PHP网站,它有一个后台批处理/CRON作业,经常运行并处理照片。web和数据库服务器以及RAID存储是Fedora 14盒子,照片软件在存储服务器上的Windows 7 VirtualBox中运行。
存储阵列作为共享文件夹加载,并在"网络位置"下显示为E:''。
PHP exec命令通过PHP-CLI每分钟运行一次,如下所示:
exec("C:''service''photo_edit.exe --input-file E:''photos''photo_example.jpg --effect crossprocess --output-file E:''photos''user''finished_example.jpg")
直接在命令行中运行命令即可。问题是,PHP似乎根本不能使用E:'',即使我可以通过命令提示符访问它。我还必须将Windows保留在VirtualBox中,因为我有更多的服务可以编辑文件并在Linux中运行。
我需要PHP能够在Windows内部的网络存储中处理这些文件。
这不是权限问题。映射到驱动器号的网络共享是按用户设置的。Apache作为运行的用户没有将该共享映射为E:
。
备选方案包括:
- 使用UNC语法:
''vboxsvr'whatever
- 为当前Apache用户映射驱动器(LOCAL_SYSTEM?)--似乎不可能
- 更改Apache服务运行的用户
PHP是否有访问E:'
的权限?请记住,当您运行该命令时,您可能是一名管理员。另一方面,PHP可能以较低的权限运行。