本文为大家列举了php新手易犯的几个小错误,供大家参考。
1、header already sent
这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!
2、页面之间无法传递变量
get,post,session在最新的PHP版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$ _POST['foo'],$_SESSION['foo']来得到。当然也可以修改自动全局变量为开(php.ini改为 reGISter_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。
3、Win32下apache2 用get方法传递中文参数会出错:
test.php?a=你好&b=你也好
传递参数是会导致一个内部错误
解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)
.............
4、win32下的session不能正常工作
php.ini默认的session.save_path = /tmp
这显然是Linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,例如session.save_path = c:Windows emp
5、Win32下mail()不能发送电子邮件
在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件,修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)
php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器。
6、初装的MySQL如果没有设置密码,应该使用update mysql.user set password="yourpassword" where user="root" 修改密码
7、显示错误信息
当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽。
例如显示$foo,可以if(isset()($foo)) echo $foo 或者echo @$foo
说到php与mysql中乱码的解决思路,就是要分析乱码产生的原因,Mysql数据库有自己的数据存储编码格式,计算机有自己的编码方式,而网页又有自己的方式,当这三者不统一时,即产生乱码问题,这里说的乱码,主要是指中文显示不正确。
一般情况下,我们要是想显示中文,就把网页的编码方式选为utf-8 ,数据库的编码方式也选择utf8_unicode_ci,同时,要注意向数据库插入数据时,一般要先执行mysql_query()("set names utf8");这样数据库就能正确存储中文了。
php中判断2个字符串是否想等,可使用==,===,也可以使用php自带的函数strcmp,相等返回0,不等返回>1或者<1。
推荐使用strcmp,===比较严格,还判断比较的类型。
举例如下:
$a='11';
$b=11;
if($a===$b)
{
echo '严格相等';
}
else if($a==$b)
{
echo '相等';
}
else
{
echo '不等';
}
运行结果为相等。
下面说一下删除数组中的元素的方法:
举例如下:
$_POST=array("firstname"=>'f',"lastname"=>'j',"email"=>"fj@qq.com","password"=>"123",'rpassword'=>"123");
$user=$_POST;
function deletearray($user)
{
foreach($user as $key => $value)
{
if($key=='firstname')
{
unset($user[$key]);
}
else
{
return true;
}
}
}
deletearray($user);
print_r($user);
备注:
开始时怎么也无法删除掉firstname,一直以为是==的错误,后来才发现原来调用函数的时候出现错误,如果想要使传入的数组发生改变,就应该传入&$user.即通过传入引用,才能使数组的结果发生改变。