Ile PHP4 sorunlar fwrite tarafından oluşturulan bir dosya içinde () include ()

3 Cevap php

I fwrite() sunucusu (Apache, PHP4) bir result.php oluşturmak için generator.php o kullveığı adında bir dosya var.

Içinde çizgilerinden biri result.php PHP include() ifadedir.

Yani, içinde 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);

Ve in 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 -->

Ben bir tarayıcıda result.php ziyvardırt Ama o include() deyimi çalışmıyor. Echo ifadesi yok, bu yüzden yolun doğru olduğunu biliyorum.

Başka test.php Ben aynı klasöre FTP kullanarak yüklenen aynı kodu ile çalışıyor.

FTP üzerinden kurtarılan iki dosya aynı kodu.

In test.php: (işleri, yankıları ve içerir doğru.)

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

include() olup result.php (fwrite() kullanılarak oluşturulan) içinde test.php (elle oluşturulan) çalışıyor, hem Herhangi bir fikir neden aynı klasörde?

Ben dosyaları arasında bildiğim tek fark:

  1. Sahibi (result.php kullanıcı tarafından yaratılmış olmaz nobody?) Farklı olabilir
  2. İzinler aslında farklıdır. FTP'd dosyası (çalışma) olan 0775, olanlar () (çalışmıyor dahil) vardı 664 fwrite kullanılarak oluşturulan ve generator.php ile CHMOD değeri ise için 0775.
  3. result.php Linux fwrite() generator.php kullanıcısı tarafından oluşturulan iken Çalışma test.php dosya, FTP üzerinden Smultron bir Mac üzerinde düzenlenmiş ve tarih oldu, Bir tarayıcı denir.

3 Cevap

PHP4 Güvenli mod açıkken, result.php, başka uid tarafından yazılmış olan, başka bir kimliği ile ait dahil dosyasını erişemiyor olamaz.

SAFE MODE Restriction in effect. The script whose uid is 48 is not allowed to access /var/www/vhosts/example.com/httpdocs/ads/sidebar_top.php owned by uid 10010 in /var/www/vhosts/example.com/httpdocs/results/result.php on line 130

I php.ini açılması ve safe_mode_gid = On değişen ve benim safe_mode_include_dir dizinini içeren ekleyerek bu çözüldü.

Ben de değişikliklerin etkisini atmak için Apache yeniden vardı.

Dosya yürütülürken önce kapalı mı?

Ayrıca, biz de dosyaları oluşturulan görebilirim?

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

Eğer bence orada "ekstra vardı