PHP-NewRelic库已废弃,newrelic/newrelic官方包不提供PHP SDK,实际集成必须依赖New Relic原生PHP扩展(newrelic.so),Composer仅能安装辅助工具或兼容层,无法替代扩展本身;该包自2021年起已被官方下架,Packagist上现存版本为空占位符,无任何可调用类或函数,所有API均由C扩展导出,未安装扩展时调用newrelic_*函数将直接报错。

直接说结论:PHP-NewRelic 库已废弃,newrelic/newrelic 官方包不提供 PHP SDK,实际集成必须依赖 New Relic 的原生 PHP 扩展(newrelic.so),Composer 只能用于安装辅助工具或旧版兼容层,不能替代扩展本身。
为什么 composer require newrelic/newrelic 会失败或无效
官方早已下架 newrelic/newrelic Composer 包(2021 年起),目前 Packagist 上仅存的 newrelic/newrelic 是空包或镜像占位符;即使强制安装,也无任何 PHP 类、函数或自动加载逻辑。New Relic 的 PHP 监控核心依赖 C 扩展,所有 API(如 newrelic_name_transaction()、newrelic_add_custom_parameter())均由扩展导出,非 Composer 加载的纯 PHP 代码可模拟。
- 运行
composer require newrelic/newrelic会提示 “Package not found” 或安装一个无实质内容的空包 -
class_exists('NewRelic\Agent')或类似判断永远为false,因为没有真实类定义 - 即使写死调用
newrelic_start_transaction(),也会报Call to undefined function
正确安装 New Relic PHP 扩展的三步关键操作
必须先让 newrelic.so 被 PHP 加载,Composer 才有“东西”可对接。常见错误是只配 Composer、漏掉扩展安装,导致一切自定义 API 调用静默失败。
- 确认 PHP 版本与 New Relic 支持矩阵匹配(例如 PHP 8.2 需用 New Relic 10.15+)
- Linux 下执行官方安装脚本:
curl -Ls https://download.newrelic.com/php_agent/install.sh | bash -s -- -i(自动下载、编译、启用newrelic.ini) - 验证是否生效:
php -m | grep newrelic应输出newrelic;php --ri newrelic查看配置详情 - 重启 Web 服务器(
systemctl restart php-fpm或apachectl restart),否则扩展不生效
如何在项目中安全调用 New Relic 原生函数(避免 fatal error)
不能假设 newrelic_*() 函数一定存在——扩展可能未启用、被禁用或版本过低。所有调用前必须做运行时检查,否则上线后直接 500。
立即学习“PHP免费学习笔记(深入)”;
- 封装一个安全调用函数:
function nr_call(string $func, ...$args) { return function_exists($func) ? $func(...$args) : false; } - 设置事务名:
nr_call('newrelic_name_transaction', 'api/v1/users'); - 添加自定义参数:
nr_call('newrelic_add_custom_parameter', 'user_id', $uid); - 记录异常(非抛出):
nr_call('newrelic_notice_error', $e->getMessage(), $e->getTraceAsString()); - 避免在 CLI 模式下误触发(如队列任务):
if (php_sapi_name() === 'cli' && !getenv('NEWRELIC_ENABLE_CLI')) { return; }
Composer 能做什么(有限但实用)
虽然不能装核心扩展,Composer 可管理两类辅助内容:一是开发期的类型提示(phpstan/extension-installer + stubs),二是旧项目迁移用的兼容层(如 newrelic/agent-php 这类社区维护的 thin wrapper)。
- 安装类型声明(提升 IDE 提示):
composer require --dev phpstan/phpstan-phpunit,再配合phpstan/extension-installer加载 New Relic stubs - 若项目历史代码大量使用
NewRelic::setAppName()这类封装,可用composer require newrelic/agent-php(注意:该包仅转发调用到原生函数,不替代扩展) - CI 中验证扩展是否就绪:
composer require --dev myclabs/deep-copy配合自定义脚本检查extension_loaded('newrelic')
真正卡住人的不是 Composer 命令怎么敲,而是扩展没装、没启、没重启服务,然后盯着空白的 New Relic Dashboard 干等十分钟。函数调用前加 function_exists() 不是过度防御,是线上环境的常态——不同服务器角色(API / worker / cron)扩展启用状态可能完全不同。



















