1.4 PHP纵览
A Walk Through PHP
PHP页面是嵌入了PHP代码的HTML页面,这是相对于许多用脚本来生成HTML(脚本不嵌入HTML)的解决方案来说的。Web服务器处理PHP命令并发送输出(以及来自文件的HTML)到浏览器。示例1-1展示了一个完整的PHP页面。
示例1-1:Hello_world.php
<html>
<head>
<title>Look Out World</title>
</head>
<body>
<?php echo 'Hello, world!' ?>
</body>
</html>
将示例1-1的内容保存到一个文件,hello_world.php,然后用浏览器查看,结果如图1-2所示。

图1-2:hello_world.php输出的内容
PHP命令echo产生的输出(在这里是"Hello, world!" 字符串)被插入到HTML文件中。在这个示例子里,PHP代码被放在<?php和?>标签中。我们还有其他的方法用来标记PHP代码,请查阅第2章的完整描述。
1.4.1 配置信息页面
Configuration Page
PHP的phpinfo()函数生成一个展示PHP安装情况的完整信息的HTML页。可以使用该函数查看是否安装了特定的扩展,或php.ini文件是否被定制。示例1-2是一个演示phpinfo()的完整页面。
示例1-2:使用phpinifo()
<?php phpinfo( ); ?>
图1-3显示了示例1-2的第一部分输出。
1.4.2 表单
Forms
示例1-3创建并处理了一个表单。当用户提交表单时,在这个name文本框中输入的信息就会被送回到该页面。下面的PHP代码会检测name字段,如果找到就显示问候语。

图1-3:phpinfo()的部分输出
示例1-3:处理一个表单
<html>
<head>
<title>Personalized Hello World</title>
</head>
<body>
<?php if(!empty($_POST['name'])) {
echo "Greetings, {$_POST['name']}, and welcome.";
} ?>
<form action="<?php $PHP_SELF; ?>" method="post">
Enter your name: <input type="text" name="name" />
<input type="submit" />
</form>
</body>
</html>
表单和信息都显示在图1-4中。

图1-4:表单和问候语
PHP程序通过$_POST和$_GET数组变量访问表单的值。在第七章我们会更详细讨论表单和表单的处理。现在是在php.ini文件中设置REGISTER_GLOBALS值为Off(默认值)的情况下进行页面处理的。
1.4.3 数据库
Databases
PHP支持所有的主流数据库系统,包括MySQL、PostgreSQL、Oracle、Sybase、SQLite和ODBC兼容数据库。图1-5中的示例通过PHP程序进行MySQL数据库查询,展示了在一个书籍评论站点上搜索一本书的部分结果,包括书的标题、类别、出版者和ISBN号。
示例1-4中的代码连接数据库,发布一个查询来检索所有匹配的书(使用WHERE字句),并且通过一个for循环产生一个表格作为输出结果。

图1-5:通过一个PHP脚本运行MySQL书籍清单查询
示例1-4:查询书籍数据库
<?
$connection = mysql_connect("localhost");
$db = "library";
mysql_select_db($db, $connection) or die( "Could not open $db");
$sql = "SELECT * FROM books WHERE available = 1 ORDER BY title";
$result = mysql_query($sql, $connection) or die( "Could not execut sql: $sql");
$num_result = mysql_num_rows($result);
?>
<table cellSpacing="2" cellPadding="6" align="center" border="1">
<tr>
<td colspan="7">
<h3 align="center">These Books are currently available</h3>
</td>
</tr>
<tr>
<td align="center">Title</td>
<td align="center">Publisher</td>
<td align="center">Category</td>
<td align="center">ISBN</td>
</tr>
<?
for ($i=0; $i < $num_result; $i++) {
$row = mysql_fetch_array($result);
$id = $row["bookid"];
echo "<tr>";
echo "<td>";
echo stripslashes($row["title"]);
echo "</td><td>";
if ( !$row["company"] )
{
echo " ";
} else {
echo $row["company"];
}
echo "</td><td>";
echo $row["typedesc"];
echo "</td><td>";
echo $row["isbn"];
echo "</td>";
echo "</tr>";
}
?>
</table>
</body>
</html>
数据库提供的动态内容是驱动新闻和电子商务站点的核心。通过PHP访问和操作数据库的更多细节将在第8章中讨论。
1.4.4 图形
Graphics
有了PHP,你可以使用GD扩展轻松地创建和处理图像。示例1-5提供了一个text-entry文本框来让用户指定按钮的文本内容。该示例获得了一个空的按钮图像文件,并通过GET “message”参数传递按钮中心的文本,然后将结果作为一个PNG图像返回到浏览器。
示例1-5:动态按钮
<?php
if (isset($_GET['message'])) {
// load font and image, calculate width of text
$font = 'times';
$size = 12;
$im = ImageCreateFromPNG('button.png');
$tsize = imagettfbbox($size,0,$font,$_GET['message']);
// center
$dx = abs($tsize[2]-$tsize[0]);
$dy = abs($tsize[5]-$tsize[3]);
$x = ( imagesx($im) - $dx ) / 2;
$y = ( imagesy($im) - $dy ) / 2 + $dy;
// draw text
$black = ImageColorAllocate($im,0,0,0);
ImageTTFText($im, $size, 0, $x, $y, $black, $font, $_GET['message']);
// return image
header('Content-type: image/png');
ImagePNG($im);
exit;
}
?>
<html>
<head><title>Button Form</title></head>
<body>
<form action="<?= $PHP_SELF ?>" method="GET">
Enter message to appear on button:
<input type="text" name="message" /><br />
<input type="submit" value="Create Button" />
</form>
</body>
</html>
由示例1-5生成的表单在图1-6中显示。创建的按钮在图1-7中显示。
你可以使用GD来动态地调整图像大小、生成图表和更多的东西。PHP也有一些扩展可用于生成流行的Adobe PDF格式的文档。

图1-6:按钮创建表单

图1-7:创建的按钮
本书第9章包含动态图像生成的深入介绍,第10章则展示如何创建Adobe PDF文件。
1.4.5 基于Shell
From the Shell
如果编译PHP而不指定特定的Web服务器类型,那么PHP解释器将作为一个独立的程序而不是一个Web服务器的模块。这样你可以利用PHP的各种功能(示例如数据库和图像)来编写PHP脚本,并从命令行调用。
示例1-6也创建了按钮,但这个示例子在命令行上运行,而不是通过Web服务器。PHP的-q选项可禁止生成HTTP头。
示例1-6:基于Shell 的创建按钮的php程序
#!/usr/local/bin/php -q
<?php
if ($argc != 3) {
die("usage: button-cli filename message\n");
}
list(, $filename, $message) = $argv;
// load font and image, calculate width of text
//加载字体和图像,计算文本宽度
$font = 'Arial.ttf';
$size = 12;
$im = ImageCreateFromPNG('button.png');
$tsize = imagettfbbox($size,0,$font,$message);
// 居中
$dx = abs($tsize[2]-$tsize[0]);
$dy = abs($tsize[5]-$tsize[3]);
$x = ( imagesx($im) - $dx ) / 2;
$y = ( imagesy($im) - $dy ) / 2 + $dy;
// 绘制文本
$black = ImageColorAllocate($im,0,0,0);
ImageTTFText($im, $size, 0, $x, $y, $black, $font, $message);
// return image
//返回图像
ImagePNG($im, $filename);
?>
保存示例1-6的代码到 button-cli中,并运行:
# ./button-cli
usage: button-cli filename message
# ./button-cli php-button.png "PHP Button"
# ls -l php-button.png
-rwxr-xr-x 1 gnat gnat 1837 Jan 21 22:17 php-button.png
现在你已经初尝PHP的滋味,知道了它能做什么,并准备好了如何学习PHP编程。我们将从语言的基本结构开始,特别关注用户定义函数、字符串处理和面向对象编程。然后转向具体的应用领域,示例如Web、数据库、图形、XML和安全。我们以内置函数和扩展的快速参考作为本书结尾。精通这些章节的内容,你就会成为PHP行家!







