0

我有一个名为的文件generator.php,用于在服务器上fwrite()创建一个result.php(Apache,PHP4)。

其中一行result.php是 PHPinclude()语句。

所以,在generator.php

if (!is_file($fname)){
    $resultfile = fopen($current_path . "/" . $fname, "w+");
}
fwrite($resultfile, '<?php include($_SERVER["DOCUMENT_ROOT"] . "'. '/inc/footer.php"); ?>' . "\n");
fclose($resultfile);
chmod($current_path . "/" . $fname, 0755);  

并在result.php

<h2>Sponsored Links</h2>
<!-- begin sidebar_top ad -->
<?php echo $_SERVER['DOCUMENT_ROOT'] . "/ads/sidebar_top.php" . "<hr />";
  include($_SERVER['DOCUMENT_ROOT'] . "/ads/sidebar_top.php"); ?>
<!-- end sidebar_top ad -->

但是include()当我在浏览器中访问时,该语句不起作用result.php。echo 语句确实如此,所以我知道路径是正确的。

另一个test.php具有相同代码的代码,我使用 FTP 上传到同一个文件夹,工作正常。

当通过 FTP 恢复时,两个文件中的代码相同。

test.php: (工作,回声并正确包含。)

<?php 
echo $_SERVER['DOCUMENT_ROOT'] . "/ads/sidebar_top.php" . "<hr />";
include($_SERVER['DOCUMENT_ROOT'] . "/ads/sidebar_top.php"); 
?> 

当两者都在同一个文件夹中时,知道为什么include()test.php(手动创建)而不是result.php(使用创建)中工作吗?fwrite()

我所知道的文件之间的唯一区别:

  1. 所有者可能不同(不会result.php由用户创建nobody?)
  2. 权限本来就不同。FTP 文件(工作)是0775,而使用 fwrite() 创建的文件(包括不工作)有664,并且由generator.phpto chmoded 0775
  3. 工作test.php文件在 Mac 上用 Smultron 编辑并通过 FTP 上传,而在 Linux 上result.phpfwrite()in创建,从浏览器调用。generator.php
4

2 回答 2

0
fwrite($resultfile, '<?php include($_SERVER["DOCUMENT_ROOT"] . "/inc/footer.php"); ?>' . "\n");

我想你有一个额外的“在那里

于 2009-11-21T01:05:36.853 回答
0

当 PHP4 安全模式开启时,result.php由另一个 uid 写入的 . 不能访问属于另一个 uid 的包含文件。

安全模式限制生效。uid 为 48 的脚本不允许访问 /var/www/vhosts/example.com/httpdocs/results/result 中 uid 10010 拥有的 /var/www/vhosts/example.com/httpdocs/ads/sidebar_top.php .php 在第 130 行

我通过打开php.ini并更改为解决了这个问题safe_mode_gid = On,并将我的包含目录添加到safe_mode_include_dir.

我还必须重新启动 Apache 才能让更改生效。

于 2009-11-21T04:12:34.950 回答