我有一个名为generator.php
的文件,它使用fwrite()
在服务器上创建result.php
(Apache,PHP4)。
result.php
中的一行是PHP include()
语句。
所以,在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()
处于同一文件夹中时,我们知道为什么result.php
正在工作?
我知道文件之间的唯一区别:
nobody
不会0775
创建?)664
,而使用fwrite()(包括不工作)创建的文件为generator.php
,并由0775
到test.php
进行编码result.php
文件,并通过FTP上传,fwrite()
由generator.php
在Linux上的{{1}}中创建,从浏览器调用。 答案 0 :(得分:0)
fwrite($resultfile, '<?php include($_SERVER["DOCUMENT_ROOT"] . "/inc/footer.php"); ?>' . "\n");
你有一个额外的“在那里我认为
答案 1 :(得分:0)
当启用PHP4安全模式时,由另一个uid写入的result.php
无法访问属于另一个uid的包含文件。
安全模式限制有效。 uid为48的脚本不允许访问 uid 10010拥有/var/www/vhosts/example.com/httpdocs/ads/sidebar_top.php 在第130行的/var/www/vhosts/example.com/httpdocs/results/result.php
我通过打开php.ini
并更改为safe_mode_gid = On
并将我的包含目录添加到safe_mode_include_dir
来解决此问题。
我还必须重新启动Apache才能让更改生效。