SQL Server 2016的SSRS PHP SDK是否有更新?求PHP连接示例代码
嘿,我完全懂你现在的麻烦——那个从Codeplex下载的旧SSRS PHP SDK不仅没安装说明,还停更十多年了,用来连SSRS 2016确实不太靠谱。别慌,咱们换个更稳妥的路子:直接用SSRS 2016原生支持的REST API来实现,不需要依赖那个过时的SDK,代码也更简洁稳定。
PHP连接SSRS 2016并调用报表的实现方案
前置准备
- 确保你的PHP环境启用了
curl扩展(大部分默认都已开启,没开的话需要在php.ini里去掉;extension=curl前面的分号,重启服务) - 拥有SSRS 2016的访问权限,清楚报表服务器的URL、登录用户名和密码(如果是Windows域身份验证,记得带上域名前缀)
基础代码示例
1. 验证连接并获取报表列表
先跑这段代码确认能正常访问SSRS服务器,拿到报表列表:
<?php // 配置你的SSRS服务器信息 $ssrsServerUrl = 'http://你的SSRS服务器地址/ReportServer'; $username = 'DOMAIN\your_username'; // 域用户格式,本地用户直接写your_username $password = 'your_password'; // 初始化CURL会话 $ch = curl_init(); // 设置CURL请求选项 curl_setopt($ch, CURLOPT_URL, $ssrsServerUrl . '/api/v2.0/reports'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); // 适配Windows身份验证 curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 临时关闭SSL校验(生产环境建议配置合法证书) // 执行请求并获取响应 $response = curl_exec($ch); $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 处理响应结果 if ($httpStatusCode === 200) { $reports = json_decode($response, true); echo "成功获取报表列表:<br>"; foreach ($reports as $report) { echo "- 报表名称:{$report['name']},完整路径:{$report['path']}<br>"; } } else { echo "请求失败,状态码:{$httpStatusCode},错误信息:" . curl_error($ch); } // 关闭CURL会话 curl_close($ch); ?>
2. 调用报表并导出为PDF
如果要直接导出指定报表为PDF(也支持Excel、Word等格式,只需要改rs:Format的值),用这段代码:
<?php $ssrsServerUrl = 'http://你的SSRS服务器地址/ReportServer'; $username = 'DOMAIN\your_username'; $password = 'your_password'; $reportFullPath = '/报表文件夹/目标报表名称'; // 比如/FinanceReports/MonthlyRevenue // 构建导出PDF的请求URL $exportUrl = "{$ssrsServerUrl}?{$reportFullPath}&rs:Command=Render&rs:Format=PDF"; // 如果需要传递报表参数,直接加在URL后面,比如: // $exportUrl .= "&Department=IT&ReportMonth=2024-05"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $exportUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $pdfContent = curl_exec($ch); $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpStatusCode === 200) { // 直接在浏览器输出PDF header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="report.pdf"'); echo $pdfContent; } else { echo "导出报表失败,状态码:{$httpStatusCode},错误信息:" . curl_error($ch); } curl_close($ch); ?>
实用注意事项
- 如果你的SSRS用的是基本身份验证,只需要把
CURLOPT_HTTPAUTH的值改成CURLAUTH_BASIC就行 - 生产环境一定要关闭
CURLOPT_SSL_VERIFYPEER=false,换成配置合法的SSL证书路径 - 报表的完整路径可以在SSRS门户里查看:打开报表后,点击右上角的「详情」就能看到路径
- 支持的导出格式包括:PDF、EXCELOPENXML、WORDOPENXML、CSV、IMAGE等,对应修改
rs:Format的值即可
内容的提问来源于stack exchange,提问作者Ioannis Tambakis
相关产品推荐
相关产品推荐

