كيف تحد من التطبيقات PHP إلى الدلائل الخاصة بها وملف php.ini الخاصة بهم؟

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

سؤال

وأنا على تشغيل عدة تطبيقات PHP على بلدي ماك، وتشغيل OS X 10.5.6، اباتشي 2، PHP 5. لدي الإعداد نطاقات فرعية لكل مشروع، وإدخالات ملف المضيف لكل نطاق فرعي، وكتل الدليل الظاهري في التكوين أباتشي . لذلك

وproject1.localhost يذهب إلى / المكتبة / خادم الويب / المستندات / PROJECT1
project2.localhost يذهب إلى / المكتبة / خادم الويب / المستندات / Project2
الخ ...

ولكن هذه الطريقة لا حقا "عزل" تطبيقات الويب. على سبيل المثال، إذا كنت تشمل برنامج نصي مثل ذلك:

<?php
include("/includes/include.php");
?>

وويرجع النصي من الدليل قاعدة جهاز الكمبيوتر الخاص بي. لذلك يصل
C: /includes/include.php

هل هناك طريقة بالنسبة لي لجعله مرجع
C: /Library/WebServer/Documents/Project2/includes/include.php

والأساس، وتجعل من ذلك أن ليست على علم بأي شيء خارج الدليل الخاص به. أيضا، هل هناك طريقة لاستخدام ملف php.ini على أساس لكل فرعي كذلك؟

هل كانت مفيدة؟

المحلول

وأعتقد أنه من الممكن لتحديد ملف php.ini في المضيف الظاهري

<VirtualHost *:80>
    ...

    PHPINIDir /full/path/to/php/ini/

</VirtualHost>

وبهذه الطريقة يمكنك تخصيص open_basedir وغيرها

نصائح أخرى

ويمكنك الحد من قدرة البرامج النصية لمعرفة أي شيء فوق شجرة مجلد محددة عن طريق إضافة في open_basedir التوجيه كتلة المجلد في ملف httpd.conf. يجب أن تبدو مثل:

<اقتباس فقرة>   

<الدليل / كامل / مسار / إلى / مجلد / تحتوي على / النصي />

     

وopen_basedir php_admin_value "/ كامل / الطريق / / قمة / مجلد / لعام / المطلوب / شجرة /"

     

وشيء واحد - إذا كنت لا تنتهي الطريق مع / ثم انها مباراة البدل. وبعبارة أخرى، "/ فار / الخ / بلادي" سوف تطابق "/ فار / الخ / مجلدي" فضلا عن "/ فار / الخ / myMothersFolder"، في حين "/ فار / الخ / بلدي /" لن يؤدي الا تطابق هذا المجلد المحدد الاسم.

وفيما يتعلق عزل التطبيق ~ غير هذا في ما يخص <م> تأمين PHP الكتابات بحيث أنهم لا يستطيعون الوصول إلى الآخرين؟ يرجى وضع -

وفيما يتعلق ملف php.ini - أنا لست على علم بأي طريقة لاستخدام ملف php.ini محدد في الدليل، ولكنك بالتأكيد يمكن أن يخلق فب تشمل الصفحة مع مجموعة من ini_set () خطوط، وربما شيء من هذا القبيل ..

<?php
  // in your header or along top of all php modules in your pap
  require_once ( '/path/to/includes/ini_set.php' );

  // ...

?>

ووالنصي ini_set.php:

<?php
  // one of these for each override of defaults set in php.ini file --
  ini_set ( $varname, $newvalue );
  ini_set ( $varname, $newvalue );
  ini_set ( $varname, $newvalue );
?>

إذا كنت ترغب في معرفة المزيد عن وظيفة ini_set ()، وهنا في صفحة وثائق على php.net: <لأ href = "http://us3.php.net/ini_set" يختلط = "نوفولو noreferrer" > http://us3.php.net/ini_set

ونأمل أن يكون هذا كان مفيدا إلى حد ما ~

وأفضل طريقة للقيام بذلك هو استخدام PHP عبر FCGI (mod_fcgid). وبهذه الطريقة يمكنك تشغيل PHP باستخدام مستخدم مختلف وملف php.ini مختلفة في عشقتك.

وهنا مثال كيفية إعداد مثل هذا التكوين على أوبونتو: <لأ href = "http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on -ubuntu-8.10 "يختلط =" نوفولو noreferrer "> http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10

إذا كنت تريد استخدام اسم المسار الكامل، يمكنك استخدام ما يلي:

<?php
include  dirname( __FILE__ ) . '/includes/include.php';
?>

الحلول الممكنة لملف php.ini

وحاول مسار نسبي! مثل:

<?php
include("./includes/include.php");
?>

أو

<?php
include("includes/include.php");
?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top