面向非开发人员的 PHP
多年来,我在《Linux Journal》的几乎每篇文章中都明确表示我不是开发人员,但我确实有一个秘密要坦白。我几乎可以用每种编程语言编写“Hello World”的等效代码。在汇编语言中,它可能是“1+1”,但我缺乏高级技能应该是显而易见的。问题是,我一直想学习编程,但我太讨厌这个过程了,以至于我从未超越“Hello World”。
然后我遇到了 PHP。
我知道 PHP 已经不再酷了。我知道与 Python 相比,它非常有限。但我也知道,使用 PHP,我实际上从一开始就能够创建有用的程序。我怀疑这就是为什么我如此热爱 Bash 脚本的原因。使用 Bash,我总是从解决问题开始,并使用脚本来解决它。我从未“学习”编写 Bash 脚本,我只是做了。我在本文中的目标是让您直接开始编写有用的 PHP 代码。如果您真的想在浏览器窗口中显示“Hello World”,请尽情去做。但我不会教你如何做!
预备知识服务器
PHP 的一大优点是几乎每个 Web 服务器都安装了它并准备就绪。如果您变得高级并想开始对底层 Linux 操作系统进行系统调用,您可能需要稍微调整 php.ini,但获得 PHP 平台通常就像安装带有 LAMP 堆栈的 Web 服务器一样简单。
对我来说,让编程更容易的一件事是确保我的用户帐户对我要编写代码的位置具有写入权限。我的流程通常包括做一个小小的更改,然后点击浏览器上的刷新按钮,看看它是否有效。如果您每次进行更改都必须 sudo cp localfile serverfile
,那将毫无乐趣。在将代码发布到 Internet 时才需要担心正确的文件权限,但在开发时则不必。
我建议的唯一其他服务器调整是添加一个 .htaccess 文件来开启错误报告。我并不总是让错误显示在页面上,但如果您遇到可怕的“php 空白页面”,快速开启错误报告以便您收到一条友好的消息,告诉您忘记了分号在哪里,这很好。我通常创建一个名为“err”的文件,并在我想看到显示的错误时快速将其重命名为“.htaccess”。您可能需要修改您的 Apache 服务器,告诉它对您正在使用的文件夹“AllowOverride”,但这值得付出努力。这是我的 .htaccess 文件的样子
php_flag display_errors on
php_value error_reporting 2039
编辑器
PHP 代码只是文本。您可以使用任何您喜欢的文本编辑器。我强烈建议使用具有语法高亮功能的文本编辑器,因为它使您更容易发现错别字。我通常在使用 Bash 脚本时使用 vim,但在使用 PHP 时,我发现自己需要更多地滚动,因此像 gedit 这样的编辑器对我来说效果更好。如果您真的想变得花哨,像 Sublime 或 SlickEdit 这样的程序非常棒,但 gedit 真的就足够了。只需确保您使用的任何编辑器都具有语法高亮功能,它非常棒。(如果您需要编辑远程文件,我建议您使用 SSHFS 来挂载远程文件夹,并像编辑本地文件一样编辑它们。它在 gedit 中效果很好。)
目标对于我们第一次一起进入编程世界的尝试,让我们创建一个有用但仍然简单的东西。我还想从一些值得在此基础上构建的东西开始。因此,让我们为您的浏览器制作一个起始页。还记得 iGoogle 吗?嗯,您将从一个更简单的东西开始,但因为它是您自己制作的,所以您可以稍后扩展它。(我发现编码是度过失眠之夜的完美方式,只是说说。)
PHP 的工作原理我花了一点时间才理解这个概念,所以我会快速解释一下。PHP 代码可以添加到标准 HTML 中,或者它可以是严格的 PHP 代码,将 HTML 作为输出创建。以下两个代码片段做的是同一件事。
test.php
<html>
<body>
<h1>The current day is: <?php echo date("l"); ?>!</h1>
</body>
</html>
test2.php
<?php
echo "<html>";
echo "<body>";
echo "<h1>The current day is: " . date("l") . "!</h1>";
echo "</body>";
echo "</html>";
?>
随意将其复制到两个单独的 PHP 文件中并浏览到该页面。您应该看到类似于图 1 的内容。我之所以详细说明这一点,是因为不同的人以不同的方式编写 PHP 代码。请记住,如果它不在 <?php ?>
容器内,则它被视为纯 HTML。<?php ?>
容器内的任何内容都会被执行,并且输出被发送到浏览器窗口。通常,PHP 代码不会有任何输出,因此屏幕上不会显示任何内容。但是,如果您想使用 PHP,它必须在这些标签内,即:<?php 这里是 PHP 代码 ?>
。

图 1. 它不是“Hello World”,但我承认,它非常接近。
让我们做点什么!我用 PHP 创建了一个简单的着陆页。(图 2 显示了它的输出。)您可以在 http://snar.co/ljphp 下载它。它也显示在列表 1 中。解压缩文件,并将其放入您的 Web 服务器中,以便您可以编辑它并使其为您工作。

图 2. 这是门户。您的家人可能看起来不那么傻!
列表 1. 示例着陆页
<?php
// This is a comment. The next lines fetch weather info
// and then turn it into a PHP array (You'll need your
// own API key!)
$json=file_get_contents("http://api.wunderground.com/
↪api/YOUR_API_GOES_HERE/conditions/pws:1/q/49749.json");
$weather = json_decode($json, TRUE);
?>
<html>
<head><h3>Landing Page</h3></head>
<body>
<table style="text-align: left; width: 100%;" border="0"
↪cellpadding="2" cellspacing="2">
<tr>
<td>
<img style="width: 250px;" alt="The Fam!"
↪src="fam.jpg"><br>
<?php
echo "Current Temp: " .
↪$weather['current_observation']['temp_f']
↪. "F<br>";
echo "Conditions: " .
↪$weather['current_observation']['weather']
↪. "<br>";
echo "<small>" . $weather['current_observation']
↪['observation_time'] . "</small><br>";
?>
</td>
<td style="vertical-align: top;">
Shawn's Very Simple Page<br>
<big><strong><a href="http://www.brainofshawn.com">Are You
↪Looking for My Blog?</a></strong></big>
<br><br>
<?php
echo "Google is: ";
is_up("www.google.com");
echo "<br>";
echo "Linux Journal is: ";
is_up("www.linuxjournal.com");
echo "<br>";
echo "Blarxnot is: ";
is_up("wwww.blarxn0t.com");
?>
</td>
</tr>
<tr>
<td colspan="2">
<?php echo "<br><center>Server Uptime: " .
↪shell_exec("/usr/bin/uptime") . "</center>"; ?>
</td>
</tr>
</table>
</body>
</html>
<?php
function is_up($host,$port=80,$timeout=1)
{
$fsock = fsockopen($host, $port, $errno, $errstr, $timeout);
if ( ! $fsock )
{
echo "DOWN";
}
else
{
echo "UP";
}
}
?>
请注意,第一行有 <?php
— 这意味着它以一段 PHP 代码而不是 HTML 开头。您要做的第一件事是将天气 API 加载到 PHP 数组中。您需要在 Wunderground 上注册以获取您自己的 API 密钥(它们是免费的),然后修改 URL 以适合您的位置。基本上,这是一个两步过程:您将 JSON 字符串加载到一个名为 $json
的变量中,然后使用 json_decode
函数将其分解为一个数组。查看“使用数组”侧边栏,了解一些关于查看数组本身的技巧,以便您可以查看它包含的内容。
在完成少量变量工作之后,PHP 部分在第 8 行以 ?>
结束。从那时起,它主要是 HTML 代码,应该看起来相当清晰。基本上,我创建了一个简单的表格。在第一个单元格中,有一张我家人的照片(您可以将您自己的 fam.jpg 添加到 php 文件所在的同一文件夹中),然后我打开另一个 PHP 代码段。在这里,我打印了来自 Weather API 的一些信息。您可以弄清楚大部分内容,但特别要注意的是 echo 语句中的句点。如果您想在屏幕上打印多个内容,请在引号外的它们之间放置一个点。
在一些更多的 HTML 代码之后,有一个部分检查 Web 服务器以查看它们是否启动。重要的是要知道“is_up”不是一个内置的 PHP 函数,而是我为了使代码更简洁而编写的东西。如果您查看文件底部,您会看到我定义函数的位置,并且您可以看到它的作用。它唯一检查的是它是否可以连接到指定地址的端口 80。我虚构了 blarxn0t.com,所以一个会失败。希望没有人购买 blarxn0t.com 只是为了惹我生气!(注意:不要尝试访问它,以我的运气,有人买了它并使其成为色情网站!)
PHP 文档的最后一部分做了一个非常酷的 PHP 技巧,并执行了一个本地 shell 命令,将输出转储到浏览器屏幕上。因此,uptime
命令的结果打印在着陆页的底部。如果您有 Windows 服务器,它可能会出错,但我假设我们都在这里使用 Linux。
这第一个简单的 PHP 页面只是这样,非常简单。但我触及了一些高级主题,我希望您从这里开始探索更多内容。数组非常酷,并且使处理来自网站的 API 变得轻而易举。如果您喜欢这种 PHP 的小尝试,我建议您研究以下内容
-
IF/THEN/ELSE 条件语句。
-
For 循环。
-
While 循环。
-
在系统上读取和写入文件。
-
GET 和 POST 变量。
-
函数。
-
包含其他 PHP 文件。
但是,我敦促您 — 不要只是查找并记住它们的工作原理。提出一个问题,然后解决它!我在 PHP 中学到的一切都始于 Google 搜索,例如“如何在 PHP 中显示带有逗号的大数字”,或“如何在 PHP 中四舍五入数字”,甚至“如何在 PHP 中多线程查询以进行并行处理?”(最后一个是我迄今为止完成的最复杂的事情!)
PHP 编码非常有趣。我简直不敢相信我会这么说,但这是真的。如果您热爱 Bash 并且无法想象没有它生活,我怀疑您会喜欢 PHP,因为它很像 Bash,但 Web 浏览器成为了输入/输出机制!如果您希望我做更多基于项目的编程语言学习,请告诉我。我很乐意找到有趣的项目的理由,但只有当每个人都想参与时才有意义!
使用数组数组可能非常令人困惑。在本文中,我展示了如何将 JSON API 提要加载到 PHP 数组中,然后引用了该数组内部的几个字段。但是,您究竟是如何知道如何构建像 $weather['current_observation']['temp_f']
这样的变量名的?值得庆幸的是,有一个很棒的工具可以在屏幕上显示数组。这是一个代码片段,它从本文的示例中获取 JSON 代码的副本,并显示整个数组,以便您可以看到数组索引的名称。您应该能够看到我上面是如何创建该变量名的
array_view.php
<?php
$json = file_get_contents("http://snar.co/jsonapi");
$weather = json_decode($json, TRUE);
echo "<pre>";
print_r($weather);
echo "</pre>";
?>
当您加载此页面时,它应该以易于阅读的格式在您的浏览器中显示整个数组。<pre>
标签很重要;否则,它只会将输出全部乱码成一行。每当我试图弄清楚数组的内容时,我都会创建一个像这样的快速 PHP 文件,以便我可以查看它。希望您能够找到变量索引,并且它将变得有意义。