1

私は Apache を使用しています (そして、顧客のために nginx または lighttpd に切り替えることができません)。他の多くのユーザーと同様に、次の変数に問題があります。

$_SERVER["SCRIPT_FILENAME"]
$_SERVER["PATH_TRANSLATED"]
$_SERVER["DOCUMENT_ROOT"]

chroot が原因で、apache の mod_fastcgi から php5-fpm に渡される変数がめちゃくちゃになり、適切な変数と一致しません。
例を示しましょう。

$_SERVER["DOCUMENT_ROOT"] = /home/vhosts/h0001/home/domains/test.com
$_SERVER["SCRIPT_FILENAME"] = /home/vhosts/h0001/php-fpm
$_SERVER["PATH_TRANSLATED"] = /home/vhosts/h0001/home/domains/test.com/phpinfo.php

それ以外の:

$_SERVER["DOCUMENT_ROOT"] = /home/domains/test.com
$_SERVER["SCRIPT_FILENAME"] = /php-fpm
$_SERVER["PATH_TRANSLATED"] = /home/domains/test.com/phpinfo.php

したがって、これらの変数から「/home/vhosts/hXXXX」を削除するだけでよいので、簡単に実行できます。

php.ini 内で auto_prepend_file ディレクティブを使用して、次のようなものを追加することを考えました。

<?php
    $_SERVER['SCRIPT_FILENAME'] = str_replace('/home/vhosts/h0001','',$_SERVER['SCRIPT_FILENAME'])
    $_SERVER['PATH_TRANSLATED'] = str_replace('/home/vhosts/h0001','',$_SERVER['PATH_TRANSLATED'])
    $_SERVER['DOCUMENT_ROOT'] = str_replace('/home/vhosts/h0001','',$_SERVER['DOCUMENT_ROOT'])

これにより、正しい変数を設定できるようになりますが、2 つの問題があります。

  • スクリプトの間違ったディレクトリにあるため、phpがまったく機能しないため(「入力ファイルがありません」)、ファイルを追加できません
  • chroot 環境が /home/vhosts/hXXXX で行われ、さまざまなドメイン docroot が /home/vhosts/hXXXX/home/domains/domain.tld/ にあるため、仮想ホストにエイリアスを設定しても機能しないようです。エイリアスを使用しても、Apache は依然として間違ったパスを提供しています。

多くの人がnginxでそれを扱って問題を解決し(SCRIPT_FILENAMEとDOCUMENT_ROOTを編集できますが、Apacheは編集できません)、他の人がchrootの適切なディレクトリツリーをシンボリックリンクして問題を解決しているのを見てきました。 . この最後の解決策は本当に最悪です。

それを行う別の方法は、このパッチを使用することですが、それを試してみても、何か問題が発生したようです: apxs2 -cia mod_fastcgi.cでコンパイルしようとすると、未定義のシンボルに関するエラーがスローされます: fcgi_config_new_static_server 、方法がわかりませんこれを修正します (静的にコンパイルしますか? apxs2 でそれを行うには?)

それについての最善の解決策は、手動で PHP にパッチを当てることのようですが、それが最もクリーンな方法であるかどうかはわかりません...!

4

0 に答える 0