مشاكل PHP4 مع تضمين () ضمن ملف تم إنشاؤه بواسطة Fwrite ()

StackOverflow https://stackoverflow.com/questions/1774122

سؤال

لدي ملف يسمى 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 في متصفح. بيان الصدى ، لذلك أعرف أن المسار صحيح.

اخر 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'd (العمل) هو 0775, ، في حين أن تلك التي تم إنشاؤها باستخدام Fwrite () (تشمل لا تعمل) كانت 664, و chmoded بواسطة generator.php ل 0775.
  3. عمل test.php تم تحرير الملف على جهاز Mac مع Smultron وتحميله عبر FTP ، بينما result.php تم إنشاؤه بواسطة fwrite() في generator.php على Linux ، ودعا من متصفح.
هل كانت مفيدة؟

المحلول 2

عند تشغيل الوضع الآمن PHP4 ، result.php, ، التي كتبها UID آخر ، لا يمكن الوصول إلى الملف المضمّن ، الذي ينتمي إلى UID آخر.

تقييد الوضع الآمن في الواقع. البرنامج النصي الذي لا يُسمح لـ UID 48 بالوصول /var/www/vhosts/example.com/httpdocs/ads/sidebar_top.php المملوكة لـ UID 10010 في /var/www/vhosts/example.com/httpdocs/results/results/results/results/results .php على الخط 130

لقد حلت هذا عن طريق الافتتاح php.ini والتغيير إلى safe_mode_gid = On, ، وإضافة دليل يشمل إلى safe_mode_include_dir.

اضطررت أيضًا إلى إعادة تشغيل Apache لترك التغييرات سارية المفعول.

نصائح أخرى

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

كان لديك إضافي "هناك أعتقد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top