作者:唐翊国,开发者生态资深经理,GE数字集团
23年工作经验,长期在杜邦、欧文斯科宁、庄信万丰等从事制造业信息化工作,规划、实施了大量MES、SAP ERP、LIMS、BPM等项目,积累了丰富的制造业数字化转型经验。
如果您还没有Predix试用帐号,请访问
https://supportcentral.ge.com/esurvey/GE_survey/takeSurvey.html?form_id=18446744073709715720
申请。请务必准确提供您的信息,我们会以邮件方式通知您注册结果。
如果您使用Windows操作系统,请参考http://blog.csdn.net/predixcn/article/details/53967673系列文章设置您的开发环境。
如果您使用Linux操作系统,请参考http://blog.csdn.net/predixcn/article/details/54093234系列文章设置您的开发环境。
在文章http://blog.csdn.net/predixcn/article/details/70238562 中我们已经创建了一个PostgreSQL数据库和一个空表,本文将示例如何使用PHP语言来访问这个数据库。
在Predix上开发一个简单的PHP应用是非常容易的,
1. 创建一个文件夹,比如 C:\PxDev\php
2. 在这个文件夹里创建一个PHP文件,例如index.php
<?php
echo"Welcome to Eagle's php demo application on Predix!";
echo"<br />\n";
echo"We'll explore how to access PostgreSQL on Predix.";
?>
3. 在同一个文件夹里创建一个manifest.yml文件:
applications:
- name: EaglePHPSQLOnPredix
memory: 256M
instances: 1
4. 命令行里运行
cf push
把这个应用部署到Predix云端。
5. 访问这个应用
https://eaglephpsqlonpredix.run.aws-jp01-pr.ice.predix.io/
有时候,看起来简单的事情,做起来也比想像中复杂。
起初我编写了一个简单的PHP文件“insert-pg.php”来执行一个简单的 “insert” SQL语句。
<?php
$dsn = "host=**** port=**** user=****password=**** dbname=****";
try
{
$db= pg_connect($dsn);
echo"Connected to the database successfully!";
echo"<br />\n";
$query= "INSERT INTO wechatmessage (message,customer) VALUES ('Hello','eagle tang')";
$result= pg_query($db,$query) or die('Query failed: ' . pg_last_error());
$cmdtuples= pg_affected_rows($result);
echo$cmdtuples . " rows are affected.\n";
pg_close($db);
}
catch (PDOException $e)
{
echo$e->getMessage();
}
?>
我把这个文件部署到Predix云端,执行它,可什么事情也没有发生,没有出错信息,也没有预想的结果,我以为是代码里有问题,比如dsn语句或者insert sql语句等,可反复看也找不出错误。
我花了不少时间查找资料,但当时都一无所获,后来无意中发现PHP提供一个简单但功能强大的函数来检查运行时环境,这个函数就是phpinfo()。我意识到如果我的代码没有问题,那么问题可能是PHP运行环境导致的。于是我专门做了一个小PHP文件ShowPHPInfo.php来捕获运行环境信息,其实很简单:
<?php
phpinfo();
?>
部署到Predix云端,
cf push
访问
https://eaglephpsqlonpredix.run.aws-jp01-pr.ice.predix.io/ShowPHPInfo.php
啊哈,这下可以清楚地看到PHP在Predix上的运行环境了
如果我们浏览一下这些环境信息,会发现没有出现PostgreSQL的连接驱动信息,这说明默认情况下Predix的PHP Buildpack没有提供对PostgreSQL访问连接的支持。一旦明白这点,通过互联网查询相关主题,我就找到了答案:我们要增加一个额外的配置文件composer.json来管理PHP运行环境。
具体来看一下composer.json的内容:
{
"name": "EaglePhPSqlOnPredix/EaglePhPSqlOnPredix",
"description": "EaglePhPSqlOnPredix is a Demo ofPHP+PosgreSQL.",
"type": "Application",
"license": "GPL-2.0+",
"require": {
"php": "5.5.*",
"ext-mbstring": "*",
"ext-pgsql": "*",
"ext-mcrypt": "*",
"ext-pdo": "*",
"ext-pdo_pgsql": "*",
"cloudfoundry-community/cf-helper-php": "1.4.*",
"monolog/monolog": "~1.13"
},
"minimum-stability": "stable",
"autoload": {
}
}
增加好composer.json ,重新部署应用到Predix云端,再次运行ShowPHPInfo.php,我们就可以看到明显的区别了,一些PDO 和PostgreSQL的模块被加载进入了PHP的运行环境:
现在再运行“insert-pg.php” ,wow,可以正常工作了!
因此我建议在做云端PHP开发时,增加这个简单的ShowPHPInfo.php 文件捕获PHP运行环境,可能会提供更多有用的细节来帮助排错。
在使用中您有任何问题,请访问我们的论坛http://bbs.csdn.net/forums/GEPredix
GE数字集团的技术专家们会在线回答您的问题。
也请访问我们在CSDN的Predix专区http://predix.csdn.net/ 了解更多Predix的内容和相关活动。