在Windows服务器上运行PHP 5.3.1,我必须修改PHP脚本才能访问网络共享上的XML文件。由于各种原因,文件不能放在PHP服务器上,我不允许在PHP服务器上创建映射驱动器,所以我必须修改PHP.ini中的open_basedir参数,以包含共享的UNC路径,例如:
open_basedir = "E:'inetpub';E:'DB_HubDataFiles';''stdmfps01'inter-departements$'CVSC-CDT-Estimation-Cedule'"
然而,当我尝试访问共享上的文件时,我得到"open_basedir限制生效"错误。我正在尝试访问以下文件:
$jobfilename = "//stdmfps01/inter-departements$/CVSC-CDT-Estimation-Cedule/" .$job . ".xml";
if (file_exists($jobfilename)) {
$jobxml = simplexml_load_file($jobfilename);
etc...
我已经确信这不是权利的问题,无论如何,错误表明open_basedir有问题。所以我的问题是:
- open_basedir处理UNC路径下的Windows(我已经看到关于这个矛盾的声明)?
- 如果是这样,我的语法有问题吗?
- 我有其他的选择,而不是使用open_basedir?
谢谢。
无论如何,这是我最终的工作,即使我不完全清楚为什么:
在php.ini中,将open_basedir参数改为使用IP地址而不是服务器名称,并使用我的文件所在目录的父目录,而不是目录本身:
'''nnn.nnn.nnn.nnn'inter-departements$'
代替:
''servername'inter-departements$'CVSC-CDT-Estimation-Cedule'
在PHP脚本中也使用IP地址:
$jobfile = "//nnn.nnn.nnn.nnn/inter-departements$/CVSC-CDT-Estimation-Cedule/" . ($jobid) . ".xml";
这对我来说很有效:用斜杠代替反斜杠
open_basedir = "E:'inetpub';E:'DB_HubDataFiles';//stdmfps01/inter-departements$/CVSC-CDT-Estimation-Cedule/"