個々のPHPアプリケーションまたはアプリケーション内のスクリプトごとに変数を設定するための最良の方法は、PHP.iniでauto_prepend_fileを設定して、上記の変数を設定するPHPファイルを指すようにすることです。
私が使用しているコードはgitで公開されていますので、お気軽に借りたり、改善したり、提案したりしてください。簡単にするために、ここにもリストします。
###
# NewRelic PHP API central file
# Description: Allows PHP installs using mod-fgcid to set newrelic_set_appname
# Usage: Inside PHP.ini for each vhost in your server,
# point to this script using: auto_prepend_file = "newrelic.php"
# Where you place the script depends on your include_path setting.
# See http://www.php.net/manual/en/ini.core.php#ini.auto-prepend-file
# Version: 0.2
# Author http://MATTERmedia.com/
#
# This script is released under the GNU General Public License, version 2 (GPL).
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
###
if (extension_loaded('newrelic')) {
if (!isset($_SERVER['HTTP_HOST'])) {
newrelic_set_appname ("Unknown");
} else {
# If UseCanonicalName is set to Off, Apache will use (user inputted) HTTP_HOST for SERVER_NAME
# Best is to rely on HTTP_HOST and validate it against a list of allowed hosts.
# See http://shiflett.org/blog/2006/mar/server-name-versus-http-host
$host = strtolower($_SERVER['HTTP_HOST']);
# Easily disable any vhost from sending data to newrelic.
$disabled_hosts = array('foo.example.com');
$valid_hosts = array('bar.example.com');
# Add a secondary AppName
$secondary_appname = ';All Virtual Hosts';
if ((!in_array($host, $disabled_hosts)) && (in_array($host, $valid_hosts))) {
newrelic_set_appname($host.$secondary_appname);
} else {
newrelic_ignore_transaction();
# technically you wouldn't need to disable_autorum when you ignore_transaction, but it's good practice.
newrelic_disable_autorum();
}
}
}
サーバー構成でディレクトリごとにphp.iniが許可されている場合は、新しいphp.iniを削除し、auto_prepend_fileがnewrelic_ignore_transaction()を呼び出すphpファイルを指すようにします。
サーバー構成でディレクトリごとのphp.ini(mod_fcgidなど)が許可されていない場合は、実行中のスクリプトを検出するように提案されたコードを変更し、その条件が満たされたときにnewrelic_ignore_transaction()を発行します。