以1个具体接口为例来展示Windows下腾讯云PHP SDK的使用

2022-07-26 11:43:35 浏览数 (1)

以下文档以1个具体接口为例来展示Windows下腾讯云PHP SDK的使用

先读https://cloud.tencent.com/developer/article/1598544,里面第8段很重要

先看目录再看细节

一、目标:PHP SDK调用CDN日志下载链接查询接口DescribeCdnDomainLogs

二、前期试验获取代码:用api explorer轻松实现,证明后端正常

三、资料准备:

  • 1、下载PHP安装包
  • 2、下载PHP SDK
  • 3、把最初在api explorer里复制下来的DescribeCdnDomainLogs.php放到正确位置

四、环境准备:

  • 1、安装IIS
  • 2、安装PHP Manager

五、打开IIS配置PHP环境并调试

  • 1、指定网站根目录到之前准备的源码目录
  • 2、如下图找到PHP Manager双击配置PHP环境
  • 3、回到IIS调试使浏览器能正常访问

一、目标:PHP SDK调用CDN日志下载链接查询接口DescribeCdnDomainLogs

二、前期试验获取代码:用api explorer轻松实现,证明后端正常

https://console.cloud.tencent.com/api/explorer?Product=cdn&Version=2018-06-06&Action=DescribeCdnDomainLogs

把api explorer里PHP代码拷贝下来留作后用。把代码保存DescribeCdnDomainLogs.php。

三、资料准备:

官网文档链接:https://cloud.tencent.com/document/product/228/39232

PHP SDK使用说明:https://cloud.tencent.com/document/sdk/PHP ,其中说明了PHP 5.6.33 版本及以上

1、下载PHP安装包

Windows PHP 全版本下载地址 https://windows.php.net/downloads/releases/archives/

下载nts版本,为什么下载nts请参考 https://www.jianshu.com/p/b0da6c99dd4c

建议直接用PHP7(我先下载的PHP5.6.40,调用接口的结果里如果有中文,在命令行下中文显示乱码,换PHP7.4.2后结果里的中文正常显示)

这里要重点注意:php.exe的执行依赖VC库,配置PHP环境之前先安装好VC库,我用的 http://www.downxia.com/downinfo/162121.html

2、下载PHP SDK

先看官网文档和这篇文档https://cloud.tencent.com/developer/article/1598544

下载github上的.zip包解压后,进到解压后的目录执行composer install或者不用下载github上的压缩包,直接新建个目录,进到新建的目录里执行composer require tencentcloud/tencentcloud-sdk-php,建议使用composer require的方式下载sdk

虽然不推荐先获取github源码压缩包再解压后进到目录执行composer install的方式,但还是要说下如何获取github源码

①用git clone url的方式下载sdk源码

URL:https://github.com/TencentCloud/tencentcloud-sdk-php

由于github.com没有中国节点,国内clone有点慢,请耐心等待

Git安装文件下载地址:https://git-scm.com/download/win

https://github.com/git-for-windows/git/releases/download/v2.25.1.windows.1/Git-2.25.1-64-bit.exe

安装过程这里不赘述,可以百度下。

在Windows下有Git GUI和Git Bash两种方式均可,我用的bash。

git clone https://github.com/TencentCloud/tencentcloud-sdk-php .PHPSDK

等了半个多小时clone完成了

复制PHPSDK目录到C盘根目录作为网站源码以备后用,别忘了进到其中执行composer install生成vendor目录

②用go get 配代理下载github上的东西会快一些

首先需要安装windows git,否则会报错

Git安装文件下载地址:https://git-scm.com/download/win

安装过程这里不赘述,可以百度下。

安装好git后再安装下windows go,参考https://cloud.tencent.com/developer/article/1594086 第一部分,下载安装go1.16.15.windows-amd64.msi

然后执行go env查看是没有启用GO111MODULE的,GOPROXY也不是我们要的地址,此时可以执行命令设置成我们需要的

代码语言:javascript复制
安装好go后,需要设置GO111MODULE和GOPROXY,才能使用go get快速把sdk下载下来

内网使用内网域名mirrors.tencentyun.com
set GO111MODULE=on
set GOPROXY=http://mirrors.tencentyun.com/go/,direct
上面命令只在当前命令窗口生效,要永久生效得用这2行命令
go env -w GO111MODULE=on
go env -w GOPROXY=http://mirrors.tencentyun.com/go/,direct

公网使用公网域名mirrors.tencent.com
set GO111MODULE=on
set GOPROXY=http://mirrors.tencent.com/go/,direct
上面命令只在当前命令窗口生效,要永久生效得用这2行命令
go env -w GO111MODULE=on
go env -w GOPROXY=http://mirrors.tencent.com/go/,direct



go get不加 -v参数,看不到过程

go get -u -v github.com/TencentCloud/tencentcloud-sdk-php


下载的SDK源码在C:UsersAdministratorgopkgmodgithub.com目录里,复制到C盘根目录作为网站源码以备后用,别忘了进到其中执行composer install生成vendor目录


通过这种方式,也可以下载其他sdk,比如go、python等,例如
go get -u -v github.com/TencentCloud/tencentcloud-sdk-go
go get -u -v github.com/TencentCloud/tencentcloud-sdk-python

3、把最初在api explorer里复制下来的DescribeCdnDomainLogs.php放到正确位置

examplescdnv20200225 (这里我是以日期区分的),examples目录原本没有cdn的例子,目录是我自己建的

注意:这里如果放的位置不对,那你得调整DescribeCdnDomainLogs.php代码里的相对路径

四、环境准备:

我是1核1G内存的Windows2008R2服务器。我们采用IIS PHPManager来配置IIS PHP环境。为什么用PHPManager,因为PHP版本太多了,而PHPManager换PHP版本只需点一个按钮,且是微软官网推荐的IIS PHP环境配置软件。不用phpstudy是因为phpstudy安全漏洞太多。

https://www.iis.net/downloads/community/2010/09/php-manager-for-iis-7

1、安装IIS

参考https://cloud.tencent.com/developer/article/1557571

2、安装PHP Manager

参考https://cloud.tencent.com/developer/article/1883670

五、打开IIS配置PHP环境并调试

首先运行inetmgr打开IIS

1、指定网站根目录到之前准备的源码目录

2、如下图找到PHP Manager双击配置PHP环境

如上图,我们只需找到php.exe所在目录选定php.exe即可完成配置,其他的phpinfo()、php_curl、php_openssl都属于检查动作了。此时在cmd命令行就可以调试了:

执行命令cd /d "DescribeCdnDomainLogs.php所在目录的绝对路径",比如我的是cd /d "C:PHPSDKexamplescdnv20200225"

注意上面是英文双引号、环境变量可配可不配

其实一开始我在cmd命令行执行时没一次性成功,而是报错如下:

[TencentCloudCommonExceptionTencentCloudSDKException] code: message:cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

翻译下unable to get local issuer certificate 是无法获取本地颁发者证书

百度搜了下unable to get local issuer certificate 找到解决方案

参考https://www.jianshu.com/p/f9c575c7f36e

这里不需要重启服务器,重启Web服务、重新开一个cmd命令行窗口即可。

打开你php.exe所在目录的php.ini,找到curl.cainfo,默认没配置,需要你下载cacert.pem进行配置

https://curl.haxx.se/ca/cacert.pem

下载cacert.pem放到PHP解压的包根目录里,然后编辑 php.ini 文件(没有php.ini的话,copy一份php.ini-production重命名为php.ini),删除 curl.cainfo 配置项前的分号注释符(;),值设置为保存的证书文件 cacert.pem 的绝对路径。

添加上curl.cainfo后一次性成功了。

3、回到IIS调试使浏览器能正常访问

PHP5.6.40 ,FastCGI直接意外退出了。

换用了PHP7.4.2版本,访问时没有意外退出,但报500内部错误。

经研究,需要把PHP Settings那里的错误配置选成生产环境,设定成Production machine后再通过IE测试就正常了。

在Web服务器里调试代码,PHP环境要再开一个配置,否则会有如上图的报错

[TencentCloudCommonExceptionTencentCloudSDKException] code: message:cURL error 0: The cURL request was retried 3 times and did not succeed. The most likely reason for the failure is that cURL was unable to rewind the body of the request and subsequent retries resulted in the same error. Turn on the debug option to see what went wrong. See https://bugs.php.net/bug.php?id=47204 for more information. (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

解决办法:命令行执行php -r "echo sys_get_temp_dir();" 打印系统默认temp目录绝对路径,Windows一般是C:Windowstemp,Linux一般是/tmp,然后在php.ini开启如下配置即可 sys_temp_dir = "系统默认temp目录绝对路径" 。

0 人点赞