短篇小说:
我的php脚本中有一个open_basedir限制 - 一个简单的“测试将新文件写入磁盘”脚本。它让我觉得我的open_basedir设置正确,文件位于正确的位置 - 但没有运气,每次都是同样的错误。我在这个网站上搜索过类似的open_basedir问题,但是我没有看到任何这个问题 - 目录看起来正确但它仍然会引发错误。
我猜测问题是什么:
1)open_basedir不像我认为的那样工作
2)我的设置错了,我只是没有看到它
3)它实际上是其他东西,如IIS读/写权限等
4)???
长篇故事:
我正在使用PHP工作在IIS服务器上,我正在尝试使用以下代码片段(一个简单的写文件测试):
date_default_timezone_set('America/Chicago');
$myFile = 'testfile.txt';
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "Some Text\n";
fwrite($fh, $stringData);
$stringData = "Some More Text\n";
fwrite($fh, $stringData);
fclose($fh);
这个php脚本位于我服务器上的C:\ inetpub \ wwwroot \ WEBDIRECTORY \ test_write.php
这是我对open_basedir的php.ini设置:
open_basedir = c:\ inetpub \ wwwroot; c:\ inetpub \ wwwroot \ WEBDIRECTORY
每当我打开脚本页面时,我都希望看不到输出,然后在我回来时应该在服务器上写一个新文件。这就是我得到的:
警告:fopen():open_basedir 限制有效。 文件(testfile.txt)不在 允许的路径:(c:\ inetpub \ wwwroot) 在 C:\的Inetpub \ wwwroot的\ WEBDIRECTORY \ test_write.php 第5行警告: fopen(testfile.txt):无法打开 stream:不允许进行操作 C:\的Inetpub \ wwwroot的\ WEBDIRECTORY \ test_write.php 第5行无法打开文件
我尝试了很多排列:最初open_basedir线只是为了 open_basedir = c:\ inetpub \ wwwroot
......但这也行不通。
我也尝试输入testfile.txt(c:\ inetpub \ wwwroot \ WEBDIRECTORY \ testfile.txt等)的绝对路径,而不仅仅是文件本身的名称,并且我不断收到相同的错误消息。
有什么想法吗?非常感谢你的帮助。
答案 0 :(得分:1)
好的,很抱歉浪费每个人的时间 - 原来这是我的系统管理员为我设置的服务器设置。 (我是新手,所以我会用一般的术语解释我的理解)
他进行了设置,以便服务器无法解析网络目录中任何文件的地址,除了您希望在网站上找到的某些类型,例如.htm,.html,.php,.jpg,我试图阅读的文件是.txt。
所以,我写了一些测试代码:
$test = realpath('c:\inetpub\wwwroot\WEBDIRECTORY\testfile.php');
echo ("test = $test\n");
if($test == FALSE){
echo ("... is FALSE\n");
}
$test = realpath('c:\inetpub\wwwroot\WEBDIRECTORY\testfile.txt');
echo ("test = $test\n");
if($test == FALSE){
echo ("... is FALSE\n");
}
迅速退回了这个:
test = C:\ inetpub \ wwwroot \ WEBDIRECTORY \ testfile.php
test = ...是FALSE
因此,realpath拒绝为以.txt结尾的任何内容返回地址,但非常乐意为.php文件执行此操作。这意味着WHENEVER我输入一个以非法扩展名结尾的其他合法(在basedir内)文件名,服务器将该地址解析为“C:\ inetpub \ wwwroot \ WEBDIRECTORY \ testfile.txt”,但为“”。当然,空字符串不会出现在basedir中,返回open_basedir限制错误。
BIZARRE!但现在我终于追溯到它的源头了。感谢所有的提示!它帮助我完成了消除过程并将其解决了。
答案 1 :(得分:-1)
这似乎是权限问题。检查C:\ inetpub \ wwwroot \ WEBDIRECTORY \上的权限。如果需要特殊权限,有时您必须更改执行写入的.PHP脚本的权限。通常,您需要目录和脚本集,而不仅仅是一个或另一个。
这是PHP手册中用于打开文件的好脚本:
$ filename ='test.txt'; $ somecontent =“将其添加到文件\ n”;
//让我们确保文件存在并且可以先写入。 if(is_writable($ filename)){
// In our example we're opening $filename in append mode.
// The file pointer is at the bottom of the file hence
// that's where $somecontent will go when we fwrite() it.
if (!$handle = fopen($filename, 'a')) {
echo "Cannot open file ($filename)";
exit;
}
// Write $somecontent to our opened file.
if (fwrite($handle, $somecontent) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
echo "Success, wrote ($somecontent) to file ($filename)";
fclose($handle);
} else { echo“文件$ filename不可写”; }