ฉันจะตั้งค่าไฟล์ php.ini ต่อไซต์บนเซิร์ฟเวอร์ LAMP โดยใช้ NameVirtualHosts ได้อย่างไร


10

ฉันมีโคมไฟเซิร์ฟเวอร์ที่ให้บริการจำนวนเว็บไซต์ที่แตกต่างกันโดยใช้NameVirtualHosts

จนกระทั่งเมื่อเร็ว ๆ นี้การมีไฟล์ php.ini ทั่วโลกนั้นใช้งานได้ดี แต่เมื่อเร็ว ๆ นี้หนึ่งในนักพัฒนาของเราได้ร้องขอการตั้งค่าบางอย่างใน php.ini ที่ฉันไม่ต้องการตั้งค่าทั่วโลก

ฉันค่อนข้างมั่นใจว่าฉันได้ยินมาว่าคุณสามารถตั้งค่าไฟล์ php.ini แบบต่อไซต์ได้แต่ไม่รู้จะทำอย่างไร

ใครบางคนชี้ให้ฉันในทิศทางที่ถูกต้องว่าจะทำสิ่งนี้ได้อย่างไร?

คำตอบ:


14

การตั้งค่าส่วนใหญ่ที่คุณจะวางใน php.ini ของคุณสามารถอยู่ใน. htaccess หรือในการกำหนดค่า apacheสำหรับไซต์นั้น ตัวอย่างหนึ่งในโฮสต์เสมือนของฉันมีสิ่งนี้ใน. htaccess

    php_value display_errors 1
    php_value register_globals 0
    php_value short_open_tag 0
    php_value magic_quotes_runtime 0
    php_value magic_quotes_gpc 0
    php_value session.name "PHPSESSID_SITEBLAH"
    php_value session.gc_maxlifetime 57600
    php_value session.gc_probability 1
    php_value session.gc_divisor 500

ดูเหมือนจะไม่ได้ผลสำหรับฉัน มีคำสั่งบางประเภทที่จำเป็นต้องตั้งค่าใน php.ini หลักเพื่อให้อนุญาตหรือไม่
Brent

1
ควรตั้งค่า "ตัวเลือก AllowOverride" หรือ "AllowOverride ทั้งหมด" ในการกำหนดค่า APache เพื่อให้ทำงานได้
StackKrish

ตัวอย่างเช่นค่าในapache.confจะเขียนทับค่าในphp.iniไฟล์ของคุณหรือวิธีอื่น ๆ
puk

7

คุณยังสามารถระบุการตั้งค่าในไฟล์การกำหนดค่า Apache (httpd.conf / apache.conf) ในกรณีของคุณคุณสามารถระบุค่าการกำหนดค่าภายในบริบท

ตัวอย่างต่อไปนี้ควรตั้งค่า upload_max_filesize เป็น 10M สำหรับโฮสต์เสมือน example.com

<VirtualHost *>
    ServerName example.com
    DocumentRoot /path_to_docroot
    php_value upload_max_filesize 10M
    php_admin_flag allow_url_fopen on
</VirtualHost>

หากคุณไม่ต้องการตั้งค่านี้สำหรับทั้งไซต์ แต่เป็นไดเรกทอรีหนึ่งที่แอปพลิเคชันอยู่คุณสามารถระบุค่าภายใน

<VirtualHost *>
   ServerName example.com
   DocumentRoot /path_to_docroot
  <Location /testApp/>
     php_value upload_max_filesize 10M
     php_admin_flag allow_url_fopen on
  </Location>
</VirtualHost>

ดูhttp://php.net/manual/en/configuration.changes.phpสำหรับคำอธิบายเพิ่มเติม


+1 แปลกไม่มีอะไรทำงาน โลคัล htaccess, ไฟล์ php ini, ไม่มีสิ่งใดทำงานได้
boot13

ขอบคุณ! อาจมีคนเจอปัญหาที่พารามิเตอร์ความปลอดภัยของ mod ต้องถูกเขียนทับ สิ่งนี้ใช้ได้กับระดับ vhost ที่ไม่ได้อยู่ใน DIRECTORY หรือ LOCATION เหตุผลคือ mod-sec กำลังถูกกำหนดค่าก่อนที่จะอ่านไดเรกทอรีหรือบล็อกสถานที่
ora-600

1

ข้อเสนอแนะอีกประการหนึ่งคือการใช้ mod-fastcgi หรือ mod-fcgi ซึ่งรัน PHP เป็นสแตนด์อะโลนแยกต่างหาก จากนั้นสำหรับแต่ละเว็บไซต์คุณสามารถกำหนดผู้ใช้แยกต่างหากและไฟล์กำหนดค่า php.ini


1

อีกตัวเลือกหนึ่งคือsuPHPซึ่งอนุญาตให้คุณกำหนด php.ini สำหรับ VirtualHost แต่ละรายการ นอกจากนี้ยังช่วยให้คุณสามารถระบุเวอร์ชัน PHP สำหรับแต่ละ VirtualHost

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.