如果您意外使用 KB、MB 或 GB 而不是 K、M 或 G,则不会显示任何错误消息。据我所知,字母字符会被忽略,它会被视为字节,因此 1GB 实际上等于 1 字节。phpinfo() 和 ini_get() 会报告您写入的内容,例如 1GB,因此即使您的设置有误,也不清楚有任何错误。
本节收集了许多在编写 PHP 脚本时可能遇到的常见错误。
PHP 是一种将数百个外部库整合在一起的粘合剂,所以有时这会很混乱。但是,一个简单的经验法则如下
数组函数 参数按“needle, haystack”顺序排列,而 字符串函数 则相反,所以“haystack, needle”。
PHP 提供了许多 预定义变量,比如超级全局变量 $_POST。你可以遍历 $_POST,因为它是一个包含所有 POST 值的关联数组。例如,让我们简单地使用 foreach 遍历它,检查 empty() 值,并打印它们。
<?php
$empty = $post = array();
foreach ($_POST as $varname => $varvalue) {
if (empty($varvalue)) {
$empty[$varname] = $varvalue;
} else {
$post[$varname] = $varvalue;
}
}
print "<pre>";
if (empty($empty)) {
print "None of the POSTed values are empty, posted:\n";
var_dump($post);
} else {
print "We have " . count($empty) . " empty values\n";
print "Posted:\n"; var_dump($post);
print "Empty:\n"; var_dump($empty);
exit;
}
?>
假设这是用于数据库,请使用数据库附带的转义机制。例如,将 mysql_real_escape_string() 与 MySQL 一起使用,将 pg_escape_string() 与 PostgreSQL 一起使用。还有通用函数 addslashes() 和 stripslashes(),它们在较旧的 PHP 代码中更常见。
<?php
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);
?>
为了能够在表达式中使用函数的结果(例如在上面的示例中将其与其他字符串连接起来),你需要 return 值,而不是 echo 它。
<pre>
<?php echo "This should be the first line."; ?>
<?php echo "This should show up after the new line above."; ?>
</pre>
在 PHP 中,代码块的结束符是“?>”或“?>\n”(其中 \n 表示换行符)。因此,在上面的示例中,回显的句子将在一行上,因为 PHP 省略了代码块结束符后的换行符。这意味着你需要在每个 PHP 代码块之后插入一个额外的换行符,以使其打印出一个换行符。
为什么 PHP 会这样做?因为在格式化普通 HTML 时,这通常会让你的生活更轻松,因为你不需要那个换行符,但你必须创建极其长的行或以其他方式使原始页面源代码难以阅读才能实现该效果。
函数 header()、setcookie() 和 会话函数 需要向输出流添加标头,但标头只能在所有其他内容之前发送。在使用这些函数之前,不能有任何输出,例如 HTML。函数 headers_sent() 将检查你的脚本是否已经发送了标头,还可以参阅 输出控制函数。
如果你以 Apache 模块的形式运行 PHP,则函数 getallheaders() 将执行此操作。因此,以下代码片段将显示所有请求标头
<?php
$headers = getallheaders();
foreach ($headers as $name => $content) {
echo "headers[$name] = $content<br />\n";
}
?>
另请参阅 apache_lookup_uri()、apache_response_headers() 和 fsockopen()
IIS 的安全模型存在缺陷。这是 IIS 下运行的所有 CGI 程序的常见问题。解决方法是创建一个纯 HTML 文件(不解析为 PHP)作为经过身份验证的目录的入口页面。然后使用 META 标签重定向到 PHP 页面,或者有一个指向 PHP 页面的链接。然后,PHP 将正确识别身份验证。这不会影响其他 NT Web 服务器。有关更多信息,请参阅:» http://support.microsoft.com/kb/q160422/ 和有关 HTTP 身份验证 的手册部分。
您必须更改 转到 Internet Information Services
。找到您的 PHP 文件并转到其属性。转到 文件安全性
选项卡,编辑 -< 匿名访问和身份验证控制
。
您可以通过取消勾选 匿名访问
并保持 集成 Windows 身份验证
勾选来解决问题,或者通过勾选 匿名访问
并编辑用户来解决问题,因为用户可能没有访问权限。
为了将 <?xml 直接嵌入到您的 PHP 代码中,您需要将 PHP 指令 short_open_tags 设置为 0
来关闭短标签。您无法使用 ini_set() 设置此指令。无论 short_open_tags 是否启用,您都可以执行以下操作:<?php echo '<?xml'; ?>
。此指令的默认值为 On
。
阅读关于 预定义变量 的手册页面,因为它包含了脚本可用的预定义变量的部分列表。您可以通过调用 phpinfo() 函数来查看所有可用变量的完整列表(以及更多信息)。请务必阅读关于 来自 PHP 外部的变量 的手册部分,因为它描述了外部变量的常见场景,例如来自 HTML 表单、Cookie 和 URL 的变量。
如果您意外使用 KB、MB 或 GB 而不是 K、M 或 G,则不会显示任何错误消息。据我所知,字母字符会被忽略,它会被视为字节,因此 1GB 实际上等于 1 字节。phpinfo() 和 ini_get() 会报告您写入的内容,例如 1GB,因此即使您的设置有误,也不清楚有任何错误。