0

サーバー上に を作成するためにgenerator.php使用するというファイルがあります(Apache、PHP4)。fwrite()result.php

の行の 1 つはresult.phpPHPinclude()ステートメントです。

だから、で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.phpecho ステートメントはそうするので、パスが正しいことがわかります。

test.phpFTPを使用して同じフォルダーにアップロードした同じコードを持つ別のものは、正常に動作します。

FTP経由で復元した場合、両方のファイルで同じコード。

In test.php: (正しく機能し、エコーし、インクルードします。)

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

両方が同じフォルダーにあるのに、 (手動で作成) で動作し、(を使用して作成) でinclude()動作しない理由は何ですか?test.phpresult.phpfwrite()

ファイル間で私が知っている唯一の違い:

  1. 所有者は異なる可能性があります (result.phpユーザーによって作成されませんnobodyか?)
  2. 元々パーミッションが違います。0775fwrite() を使用して作成されたファイル (動作していない) は であり、 to664によって chmod されています。generator.php0775
  3. 作業test.phpファイルは、Mac で Smultron を使用して編集し、FTP 経由でアップロードしました。Linux でresult.php作成したファイルは、ブラウザーから呼び出しました。fwrite()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 に属するインクルード ファイルにアクセスできません。

SAFE MODE 制限が有効です。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 に答える