先读https://cloud.tencent.com/developer/article/1598544,里面第8段很重要
先看目录再看细节
一、目标:PHP SDK调用CDN日志下载链接查询接口DescribeCdnDomainLogs
二、前期试验获取代码:用api explorer轻松实现,证明后端正常
三、资料准备:
四、环境准备:
五、打开IIS配置PHP环境并调试
把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 版本及以上
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
先看官网文档和这篇文档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也不是我们要的地址,此时可以执行命令设置成我们需要的
安装好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:\Users\Administrator\go\pkg\mod\github.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
examples\cdn\v20200225 (这里我是以日期区分的),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
参考https://cloud.tencent.com/developer/article/1557571
首先运行inetmgr打开IIS
如上图,我们只需找到php.exe所在目录选定php.exe即可完成配置,其他的phpinfo()、php_curl、php_openssl都属于检查动作了。此时在cmd命令行就可以调试了:
执行命令cd /d "DescribeCdnDomainLogs.php所在目录的绝对路径",比如我的是cd /d "C:\PHPSDK\examples\cdn\v20200225"
注意上面是英文双引号、环境变量可配可不配
其实一开始我在cmd命令行执行时没一次性成功,而是报错如下:
[TencentCloud\Common\Exception\TencentCloudSDKException] 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后一次性成功了。
PHP5.6.40 ,FastCGI直接意外退出了。
换用了PHP7.4.2版本,访问时没有意外退出,但报500内部错误。
经研究,需要把PHP Settings那里的错误配置选成生产环境,设定成Production machine后再通过IE测试就正常了。
在Web服务器里调试代码,PHP环境要再开一个配置,否则会有如上图的报错
[TencentCloud\Common\Exception\TencentCloudSDKException] 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:\Windows\temp,Linux一般是/tmp,然后在php.ini开启如下配置即可 sys_temp_dir = "系统默认temp目录绝对路径" 。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。