Windows Azure的Website服务可以托管多种代码编写的网站应用,包括.NET, Node.js和PHP。他们都使用IIS托管。其中PHP是通过IIS上的PHP插件进行支持的。当我们在Azure上申请一个Website时,它已经缺省支持PHP应用了,我们不需要进行任何配置。下面就简要看下如何发布PHP应用到Azure上
首先,在门户上创建Website
创建时选择Create with Database
为站点输入一个域名前缀。Azure上的网站都在azurewebsites.net域名下,我们如果自己有域名,可以在创建站点后将自己的域名和Azure上的站点绑定。数据库可以选择SQL database或者是Mysql. 其中SQL由微软提供服务,Mysql由ClearDB提供服务
创建成功后点击网站名
进入后可以查看网站的整体情况。上半部分是性能指标监控,包括CPU、流量、HTTP请求情况等,这些被监控的指标可以在Monitor页面中配置。中间的部分是使用信息计量,包括已消费的量和剩余的量。对于免费站点来说,每天可用的出流量是165MB,超出后该网站会被暂停,直到第二天又获得165MB配额。中间右侧是配置信息概览,包括站点URL,FTP地址和用户名等。底部是一些常用功能,比如停止或重启该站点,或者用WebMatrix编辑网站文件
此时点击网站链接即可访问网站。此时网站只有一个空页面。
在configure页面,可以配置PHP版本,绑定自己的域名,启用日志(日志可以通过FTP下载)等。在connection string里面,记录着刚才我们创建的数据库的连接字符串,把这里的database、data source、username和password记录下来,后面编写PHP应用时会采用这些信息连接数据库
在Scale界面,我们可以改变网站的规模。Free模式下只能有1个IIS实例,Shared模式下可以跟别人共享多个IIS实例,Reserved模式下可以独占多个IIS实例,且每个IIS实例运行于独立的虚机
下面,我们看下如何向该网站发布代码。Azure支持多种发布方式,包括:
首先看下FTP。回到Dashboard界面,在中部右侧有FTP hostname和FTP username,这里的密码如果不知道,点击上面的Reset Deployment Credentials,在里面输入用户名和新密码。
然后就可以用FTP连接了。这里我们用Windows自带的资源管理器来连接。直接在浏览器上点击FTP路径。
在弹出的对话框中输入用户名和密码。要注意用户名要跟界面上显示的一样,由站点名和用户名两部分组成,中间由"\"连接。
这样就可以用IE打开FTP目录了,里面有两个文件夹,分别是代码目录和日志目录。
不过IE不支持上传,只能浏览。可以切换到资源管理器。在菜单上选择View->open FTP....。之后就可以像访问本地文件一样访问远程文件了。
对于MySQL数据库的发布,有两种方式,一种方式使用Mysql命令行执行SQL命令进行表创建和数据生成,另一种方式是用Mysql工具进行数据导入。Mysql的连接方式可以从Configure界面里的connection strings获得,而上传的PHP程序里面指向的数据库也应该是这个位置
除了继续使用Mysql外,我们也可以把Mysql迁移到Azure上的SQL database上,可参考http://blog.csdn.net/shaunfang/article/details/8557773
下面就简单做一个PHP+MYSQL的测试。这里采用Mysql workbench工具作为Mysql管理工具。Mysql workbench可从Oracle网站下载
1. 首先用Mysql workbench连接到Azure上的Mysql实例上。在New connection里面输入Mysql的连接信息,包括hostname,username和密码。它们来自于前面提到的connection strings
2. 打开后即可运行SQL命令建表,比如:
CREATE TABLE registration_tbl(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR(30), email VARCHAR(30), date DATE);
3.在本地建立一个PHP文件:index.php,把里面的host,user,pwd,db替换成connection strings里面提供的内容
<html> <head> <Title>Registration Form</Title> <style type="text/css"> body { background-color: #fff; border-top: solid 10px #000; color: #333; font-size: .85em; margin: 20; padding: 20; font-family: "Segoe UI", Verdana, Helvetica, Sans-Serif; } h1, h2, h3,{ color: #000; margin-bottom: 0; padding-bottom: 0; } h1 { font-size: 2em; } h2 { font-size: 1.75em; } h3 { font-size: 1.2em; } table { margin-top: 0.75em; } th { font-size: 1.2em; text-align: left; border: none; padding-left: 0; } td { padding: 0.25em 2em 0.25em 0em; border: 0 none; } </style> </head> <body> <h1>Register here!</h1> <p>Fill in your name and email address, then click <strong>Submit</strong> to register.</p> <form method="post" action="index.php" enctype="multipart/form-data" > Name <input type="text" name="name" id="name"/></br> Email <input type="text" name="email" id="email"/></br> <input type="submit" name="submit" value="Submit" /> </form> <?php // DB connection info //TODO: Update the values for $host, $user, $pwd, and $db //using the values you retrieved earlier from the portal. $host = "value of Data Source"; $user = "value of User Id"; $pwd = "value of Password"; $db = "value of Database"; // Connect to database. try { $conn = new PDO( "mysql:host=$host;dbname=$db", $user, $pwd); $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); } catch(Exception $e){ die(var_dump($e)); } // Insert registration info if(!empty($_POST)) { try { $name = $_POST['name']; $email = $_POST['email']; $date = date("Y-m-d"); // Insert data $sql_insert = "INSERT INTO registration_tbl (name, email, date) VALUES (?,?,?)"; $stmt = $conn->prepare($sql_insert); $stmt->bindValue(1, $name); $stmt->bindValue(2, $email); $stmt->bindValue(3, $date); $stmt->execute(); } catch(Exception $e) { die(var_dump($e)); } echo "<h3>Your're registered!</h3>"; } // Retrieve data $sql_select = "SELECT * FROM registration_tbl"; $stmt = $conn->query($sql_select); $registrants = $stmt->fetchAll(); if(count($registrants) > 0) { echo "<h2>People who are registered:</h2>"; echo "<table>"; echo "<tr><th>Name</th>"; echo "<th>Email</th>"; echo "<th>Date</th></tr>"; foreach($registrants as $registrant) { echo "<tr><td>".$registrant['name']."</td>"; echo "<td>".$registrant['email']."</td>"; echo "<td>".$registrant['date']."</td></tr>"; } echo "</table>"; } else { echo "<h3>No one is currently registered.</h3>"; } ?> </body> </html>
4.把这个文件通过FTP上传到Azure的wwwroot下
5. 最后,点击网站链接即可访问
结果如下