مشاكل PHP4 مع تضمين () ضمن ملف تم إنشاؤه بواسطة Fwrite ()
-
21-09-2019 - |
سؤال
لدي ملف يسمى 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()
) ، عندما يكون كلاهما في نفس المجلد؟
الاختلافات الوحيدة التي أعرفها بين الملفات:
- يمكن أن يكون المالك مختلفًا (أليس كذلك
result.php
يتم إنشاؤه بواسطة المستخدمnobody
?) - الأذونات مختلفة في الأصل. ملف ftp'd (العمل) هو
0775
, ، في حين أن تلك التي تم إنشاؤها باستخدام Fwrite () (تشمل لا تعمل) كانت664
, و chmoded بواسطةgenerator.php
ل0775
. - عمل
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");
كان لديك إضافي "هناك أعتقد