我是PHP的新手,我刚刚练习PHP setcookie()并且失败了.
http:// localhost/test/index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
http:// localhost/test/view.php
<?php
// I plan to view the cookie value via view.php
echo $_COOKIE["TestCookie"];
?>
Run Code Online (Sandbox Code Playgroud)
但我没能运行index.php,这样的IE警告.
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\index.php:9) in C:\xampp\htdocs\test\index.php on line 12
Run Code Online (Sandbox Code Playgroud)
毫无疑问,我启用了IE 6 cookie.
上面的程序有什么问题吗?谢谢.
使用WinXP OS和XAMPP 1.7.3.
一般来说,php程序员是ob_start/ ob_get_clean()被认为是不好的做法吗?
输出缓冲有什么缺点吗?
我有一个包含我网站内容的php文件.该文件需要是.php,因为我首先获得一些变量,然后在网站内容中使用它.像这个例子:
<?php
$user_name = $_REQUEST['username'];
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Page Title</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
Welcome <?php echo $username;?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我需要<!DOCTYPE HTML>,因为文件扩展名是PHP?它是否正确放置?它应该在标签之前还是在我文件的第一行?
我也注意到如果我删除了<!DOCTYPE HTML>,我的一些css代码停止工作......
非常感谢你.
登录页面中出现以下警告:它在localhost中工作,但在远程主机中不工作
警告: session_start()[function.session-start]:无法发送会话cookie - 已经发送的标头(输出从第8行开始)
警告: session_start()[function.session-start]:无法发送会话缓存限制器 - 已发送的标头(输出从第8行开始)

<?php
session_start();
if(isset($_SESSION['usr']) && isset($_SESSION['pswd'])){
header('Location: content.php');}
?>
<body>
<center>
<form method='post' action='login.php'>
<!– in this example I link it with login.php to check the password & username–>
<table>
<tr><td>Username:</td><td><input type='text' name='usr'></td></tr>
<tr><td>Password:</td><td><input type='password' name='pswd'></td>
</tr>
<tr><td><input type='submit' name='login' value='Login'></td>
<td><input type='reset' name='reset' value='Reset'></td></tr>
</table>
</form>
</center>
</body>
Run Code Online (Sandbox Code Playgroud)
<body>
<a href="resumedownload.php">Click here to Download to Resume</a>
<?php
session_start();
if(!isset($_SESSION["usr"]) || !isset($_SESSION["pswd"])){
header('Location: index.php');}
include 'logoff.php';
?>
</body> …Run Code Online (Sandbox Code Playgroud) 我在互联网上阅读了相当多的资料,不同的作者建议使用输出缓冲.有趣的是,大多数作者仅仅因为它允许将响应标题与实际内容混合而论证其使用.坦率地说,我认为负责任的Web应用程序不应混合输出标头和内容,Web开发人员应该在其脚本中查找可能的逻辑缺陷,这会导致在生成输出后发送标头.这是我对ob_*输出缓冲API的第一个参数.即使你得到的一点点便利 - 将标题与输出混合 - 使用它也不是一个足够的理由,除非你需要快速破解脚本,这通常不是严肃的Web应用程序中的目标或方式.
此外,我认为大多数处理输出缓冲API的人都没有考虑这样一个事实:即使没有启用显式输出缓冲,PHP与插入的Web服务器相结合,仍然会进行一些内部缓冲.很容易检查 - 做一些短串的回声,睡10秒,然后做另一个回声.使用浏览器请求您的脚本,并观察空白页暂停10秒,此后两行都出现.在有人说它是渲染假象而不是流量之前,跟踪客户端和服务器之间的实际流量表明服务器已经Content-Length为整个输出生成了具有适当值的标头 - 表明输出没有逐步发送echo调用,但在一些缓冲区中累积,然后在脚本终止时发送.这是我对显式输出缓冲的抱怨之一 - 为什么我们需要两个不同的输出缓冲区实现?可能是因为内部(不可访问的)PHP/Web服务器输出缓冲受PHP开发人员无法控制的条件限制,因此不可用?
在任何情况下,我为一,开始认为应该避免显式输出缓冲(系列ob_*函数)并依赖于隐式的flush,在必要时协助它具有良好的功能.也许如果Web服务器有一些保证在每次回显/打印调用时实际向客户端发送输出,那么设置显式缓冲会很有用 - 毕竟不希望向客户端发送大约100的响应字节块.但是有两个缓冲区的替代方案似乎是一个有点无用的抽象层.
那么,最终,严肃的Web应用程序是否需要输出缓冲?
这是我的档案.我想让它重定向,但没有任何反应.为了查看发生了什么,我在标题部分之前添加了一个echo.
它既不会抛出错误,也不会重定向到index.php.怎么了?我打开/关闭了输出缓冲,但没有任何东西可以重定向.我能做什么?
<?
error_reporting(E_ALL);
echo 'This is an error';
header("Location: login.php");
die();
?>
Run Code Online (Sandbox Code Playgroud)
谢谢
include('header.php');
$name = $_POST['name'];
$score = $_POST['score'];
$dept = $_POST['dept'];
$MyDB->prep("INSERT INTO demo (`id`,`name`,`score`,`dept`, `date`) VALUES ('','$name','$score','$dept','$date')");
// Bind a value to our :id hook
// Produces: SELECT * FROM demo_table WHERE id = '23'
$MyDB->bind(':date', $date);
// Run the query
$MyDB->run();
header('Location:index.php');
exit;
Run Code Online (Sandbox Code Playgroud)
上面的代码一直给我一个重定向问题.错误如下:
警告:无法修改标头信息 - 已在/ Applications/MAMP/htdocs/testygubbins/OO/test/form中发送的标头(在/Applications/MAMP/htdocs/testygubbins/OO/test/header.php:15处开始输出). php在第16行.
我完全被这个弄得晕头转向.有谁知道我应该做些什么来使它工作?
编辑
header.php代码:
<?php
include('class.user.php');
include('class.Connection.php');
$date = date('Y-m-j');
?>
<html>
<head>
<link rel=StyleSheet href="css/style.css" type="text/css" media=screen>
<title>Test</title>
</head>
<body>
<div id="page">
Run Code Online (Sandbox Code Playgroud) 可能重复:
PHP已发送的标头
每次我尝试提交表格删除表格时,我都会收到此错误.
警告:无法修改标头信息 - 已在第106行的C:\ xampp\htdocs\speedycms\deleteclient.php中发送的标头(输出从C:\ xampp\htdocs\speedycms\deleteclient.php:47开始)
我的代码有问题吗?我需要改变什么来使它工作?
<?php
if (!isset($_SESSION)) {
session_start();
}
$MM_authorizedUsers = "";
$MM_donotCheckaccess = "true";
// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {
// For security, start by assuming the visitor is NOT authorized.
$isValid = False;
// When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
// Therefore, we know that a user is …Run Code Online (Sandbox Code Playgroud) 我有这个代码,为什么我的标题位置不起作用?它是一种更新,编辑和删除我的控制面板中的一些页面的形式...我在form.php的同一个文件夹中有一个index.php文件...有什么帮助吗?()我试着把标题放在后面编辑和删除...仍然转到表单页面而不是索引...
<?php
include "../../includes/site_includes.php";
//send
if ((isset($_POST["send"])) && ($_POST["send"] == 1)) {
$pageid = $_POST["page_id"];
$pagetitle = $_POST["page_title"];
$nameinmenu = $_POST["page_menu_name"];
$nameinurl = $_POST["page_name_url"];
$link = $_POST["page_link"];
$picture = $_POST["page_pic"];
$desc = $_POST["page_desc"];
$content = $_POST["page_content"];
}
if ((isset($_POST["act"])) && ($_POST["act"] == "add")) {
$sql = insertpage();
if ($result = $mysqli->prepare($sql)) {
$result->bind_param("sssssss", $pagetitle, $nameinmenu, $nameinurl, $link, $picture, $desc, $content);
$result->execute();
$result->store_result();
$rows = $result->num_rows;
}
}
////edit
if ((isset($_GET["act"])) && ($_GET["act"] == "edit")) {
$sql = getfrompages();
if ($result …Run Code Online (Sandbox Code Playgroud) 这个contact.php表单正在处理提交,然后重定向到新页面,然后突然停止工作.我已经尝试添加错误处理,并将标题移动到所有其他前面的顶部,但都不起作用.表单仍然按预期提交数据,只是重定向不起作用.任何想法,将不胜感激.
<?php
include 'config.php';
$post = (!empty($_POST)) ? true : false;
if($post)
{
$email = trim($_POST['email']);
$subject = "Downloaded Course Units";
$error = '';
if(!$error)
{
$mail = mail(WEBMASTER_EMAIL, $subject, $message,
"From: ".$email."\r\n"
."Reply-To: ".$email."\r\n"
."X-Mailer: PHP/" . phpversion());
if($mail)
{
echo 'OK';
header('location: http://www.google.com.au/');
exit();
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)