// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 使用 PHP 创建数据库驱动的应用程序
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 使用 PHP 创建数据库驱动的应用程序 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 使用 PHP 创建数据库驱动的应用程序

= 第 9 课：将应用程序部署到远程 Web 服务器
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 第 9 课：将应用程序部署到远程 Web 服务器 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 第 9 课：将应用程序部署到远程 Web 服务器


通常，PHP 应用程序实际上在远程服务器上运行，并通过文件传输协议 (FTP) 进行访问。要在远程服务器上部署 CRUD 应用程序，您将需要向托管提供商注册一个普通帐户、注册一个 FTP 帐户并创建一个远程数据库。

您可以使用您喜欢的任何托管。当前文档介绍 X10HOSTING 免费托管中的部署过程。此托管包括 MySQL，但不包括 Oracle 数据库服务器。

所有的用户名、口令和电子邮件地址都是虚构的，仅用作示例。如果用户未登录论坛的时间超过了一个星期，则托管管理会阻止该用户的帐户。因此您可能无法再使用与本教程中完全相同的用户名、口令、电子邮件地址和其他凭证。

在本课程中，您将了解如何执行以下操作：

* 更改数据库连接设置以使用远程数据库

当前文档是“在适用于 PHP 的 NetBeans IDE 中创建 CRUD 应用程序”教程的一部分。



== 来自上一课的应用程序源代码

MySQL 用户：单击link:https://netbeans.org/files/documents/4/1934/lesson8.zip[+此处+]以下载源代码，该代码反映了在完成上一课之后的项目状态。


== 注册电子邮件帐户

如果之前尚未创建电子邮件帐户，则创建一个。在此示例中，电子邮件地址为 phpuser65@googlemail.com。


== 注册托管帐户

要在 link:http://x10hosting.com/[+X10HOSTING+] 免费托管中创建托管帐户，请执行向导中的步骤，同时输入以下设置。您将在任何其他托管站点中输入类似信息。

|===
|帐户设置  |值 

|电子邮件地址 |phpuser65@gmail.com 

|域名 |link:http://x10hosting.com/[+x10Hosting.com+] 

|子域 |phpuser 

|托管帐户用户名（也用于登录到 cPanel） |phpuser 

|托管帐户口令（也用于登录到 cPanel） |qwerty1234 

|论坛用户名 |phpuser 

|论坛口令 |qwerty 

|FTP 帐户名称 |uploader 

|FTP 用户名 |uploader@phpuser.x10hosting.com 

|FTP 服务器 |ftp.phpuser.x10hosting.com 

|远程数据库主机名 |phpuser 

|远程数据库 |wishlist 

|远程数据库用户名 |phpuser 

|远程数据库用户口令 |phpuserpw 
|===


== 注册 FTP 帐户

现在，您已有一个托管帐户，还需要一个 FTP 帐户，用来传输 PHP 源代码和其他相关文件，以便于在服务器上执行。对于 x10Hosting，打开 cPanel 并选择 "New FTP Account"，然后按向导的指示操作。


== 创建远程数据库

由于 CRUD 应用程序使用数据库，因此，您还将需要在具有<<registerHostingAccount,托管帐户>>的远程服务器上部署  `wishlist`  MySQL 数据库。


== 使用现有源代码和远程 Web 站点运行配置设置 PHP 项目

1. <<previousLessonSourceCode,下载源文件>>，这些文件与完成上一课后的应用程序状态相对应。解压缩文件。
2. 在  `htdocs`  文件夹中保存源文件。
3. 创建link:project-setup.html#importSources[+基于现有源代码的 PHP 项目+]：
* 指定下载的源代码在“源”文件夹中的位置
* 选择link:project-setup.html#remiteWebSite[+远程 Web 站点+]运行配置并配置 FTP 连接
4. 完成项目创建。


== 更新 WishDB 类

到目前为止，您已在本地 Web 服务器上开发并运行“愿望列表”应用程序，并使用了本地的 MySQL 或 Oracle 数据库服务器。为使应用程序使用远程 MySQL 数据库，您需要更新通过  `WishDB`  类的变量指定的连接设置。

1. 打开文件  `db.php` 。
2. 更改  `WishDB`  类的变量：

[source,php]
----

private $user = "<the name of the remote database user>";        
private $pass = "<the password of the remote database user>";
private $dbName = "<the name of the remote database>";
private $dbHost = "<the account username specified during the hosting account creation>";
----
在此示例中，变量将进行如下更新：

[source,php]
----

private $user = "phpuser";
private $pass = "phpuserpw";
private $dbName = "wishlist";
private $dbHost = "localhost";
----


== 后续步骤

link:wish-list-lesson8.html[+<< 上一课+]

link:wish-list-tutorial-main-page.html[+返回到教程主页+]


link:/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Wish%20List%20CRUD%200:%20Using%20and%20CSS[+发送有关此教程的反馈意见+]


要发送意见和建议、获得支持以及随时了解 NetBeans IDE PHP 开发功能的最新开发情况，请link:../../../community/lists/top.html[+加入 users@php.netbeans.org 邮件列表+]。

link:../../trails/php.html[+返回至 PHP 学习资源+]

