如果您意外使用 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 使用mysql_real_escape_string(),使用 PostgreSQL 使用pg_escape_string()。还有更通用的addslashes()和stripslashes()函数,在较旧的 PHP 代码中更常见。
<?php
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);
?>
<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() 将检查您的脚本是否已发送标头,并参阅输出控制函数。
如果您将 PHP 作为 Apache 模块运行,则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,因此即使您的设置存在问题,也不清楚您的设置有任何问题。