PHP编程
集成 PHP 的方法(HTML 表单等)
表单
表单是与 PHP 交互的最常见方式之一。如前所述,建议你了解 HTML,接下来我们就会开始使用它。如果你不熟悉,可以参考 HTML 维基书进行回顾。
表单设置
要创建一个表单并将其指向 PHP 文档,可以使用 HTML 标签 <form>
并指定一个 action 属性,如下所示:
<form method="post" action="action.php">
<!-- 你的表单内容 -->
</form>
当用户点击 "提交" 后,表单内容会被发送到 PHP 脚本进行处理。表单中的所有字段会根据提交表单时使用的方法存储在 $_GET
或 $_POST
变量中。
GET
和 POST
方法的区别在于,GET
会将所有的值附加在 URL 中,而 POST
通过 HTTP 头部将数据透明地提交。一般而言,如果提交敏感数据,推荐使用 POST
,因为 POST
表单通常提供更高的安全性。
请记住,$_GET
和 $_POST
是超全局数组,这意味着你可以在 PHP 脚本中的任何地方引用它们。例如,在函数内部使用时,不需要声明 global $_POST
或 global
$_GET
。
示例
以下是一个如何使用表单提交数据的示例。
<!-- Inside enterlogin.html -->
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="post" action="login.php">
Please log in.<br/>
Username: <input name="username" type="text" /><br />
Password: <input name="password" type="password" /><br/>
<input name="submit" type="submit" />
</form>
</body>
</html>
这个表单会显示如下内容:
Please log in.
Username: …
Password: …
submit
接下来是用来处理表单的 PHP 脚本(login.php
):
<?php
// Inside login.php
if ($_POST['username'] == "Spoom" && $_POST['password'] == "idontneednostinkingpassword") {
echo("Welcome, Spoom.");
} else {
echo("You're not Spoom!");
}
?>
更详细地看看这个脚本:
if ($_POST['username'] == "Spoom" && $_POST['password'] == "idontneednostinkingpassword")
如你所见,$_POST
是一个数组,数组的键对应表单中每个字段的名称。为了向后兼容,你也可以使用数字索引来引用这些值,但通常不推荐,因为这种方式不如使用字段名更清晰。
这就是如何使用表单将数据提交给 PHP 脚本的方法,非常简单。
更多信息
PHP 命令行
虽然 PHP 最初是作为 Web 语言创建的,但它也可以用于命令行脚本(尽管这并不常见,因为像 bash 脚本这样的工具可以更简便地完成相关任务)。
输出
你可以像输出网页一样向控制台输出内容,只是要记住,HTML 不会被解析(这实际上是一个常见错误),你必须手动输出换行符。一个典型的 "Hello World" 程序如下所示:
<?php
print "Hello World!\n";
?>
注意末尾的换行符 - 换行符对于使输出更整洁和可读非常有用。
输入
PHP 有几个特殊的文件可以用于从命令行读取和写入。这些文件包括 stdin
、stdout
和 stderr
文件。要访问这些文件,你可以像处理普通文件一样使用 fopen
,但需要使用 PHP 特殊的 php://
协议,如下所示:
$fp = fopen("php://stdin","r");
要从控制台读取输入,只需读取 stdin
即可。写入控制台不需要特殊的重定向,如果你想写入 stderr
,可以打开它并写入:
$fp = fopen("php://stderr","w");
考虑到如何读取输入,接下来我们可以构造一个简单的命令行脚本,让用户输入用户名和密码进行身份验证。
<?php
$fp = fopen("php://stdin", "r");
print "Please authenticate yourself\n";
print "Username: ";
// 使用 rtrim 去除 shell 中的换行符
$user = rtrim(fgets($fp, 1024));
print "Password: ";
// 使用 rtrim 去除 shell 中的换行符
$pass = rtrim(fgets($fp, 1024));
if (($user == "someuser") && ($pass == "somepass")) {
print "Good user\n";
// ... 做一些事情 ...
} else {
die("Bad user\n");
}
fclose($fp);
?>
请注意,这个脚本只是一个示例,展示如何使用 PHP 进行命令行编程 —— 该代码展示了一种非常不安全的身份验证方式,不应作为存储密码的实践方式。记住,PHP 脚本是可以被他人读取的!