让PHP初学者迷惑的10个知识点提交的变量应该使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来获取。当然你也可以修改自动全局变量为on(php。注意:PHP中的超全局变量从PHP4.2.0开始,register_globals默认值为off。这样很多可以直接使用的变量之前,比如$PHP_SELF或者你设置的SESSION变量不能使用“$变量名”,这可能会给你带来很多改变,但是有助于提高安全性。要访问这些变量,你需要使用PHP超全局变量,如下:$_SERVER变量由web服务器设置或直接与当前脚本的执行环境相关联。类似于旧的$HTTP_SERVER_VARS数组。前面的$PHP_SELF对应$_SERVER['PHP_SELF'],可以使用phpinfo来查看你的$_SERVER变量。$_GET变量通过HTTPGET方法提交给脚本。类似于旧的$HTTP_GET_VARS数组。$_POST变量通过HTTPPOST方法提交给脚本。类似于旧的$HTTP_POST_VARS数组。$_COOKIE变量提交通过HTTPCookies方法发送到脚本。类似于旧的$HTTP_COOKIE_VARS数组。$_SESSION当前在脚本会话中注册的变量。类似于旧的$HTTP_SESSION_VARS数组。$_FILES变量通过HTTPPOST文件上传提交给脚本。类似于旧的$HTTP_POST_FILES数组。$_ENV执行环境提交给脚本的变量。类似于旧的$HTTP_ENV_VARS数组。对于$_FILES变量:(文件域字段为“myfile”)$_FILES['myfile']['name']客户端机器上文件的原始名称(包括路径)。$_FILES['myfile']['type']文件的MIME类型,需要浏览器支持,如"image/gif"。$_FILES['myfile']['size']上传文件的大小,以字节为单位。$_FILES['myfile']['tmp_name']文件上传后保存在服务器上的临时文件名(包括路径)。$_FILES['myfile']['error']以及与文件上传相关的错误代码。['error']是在PHP4.2.0中添加的。当php.ini中register_globals设置为on时,$myfile_name相当于$_FILES['myfile']['name'],$myfile_type相当于$_FILES['myfile']['type'],等等[2]win32下session不正常。默认的session.save_pathphp.ini=/tmp显然是linux下的配置。PHP在win32下无法读写session文件,所以session无法使用。改成绝对路径。好的,例如session.save_path=c:\windows\temp。【3】显示错误信息当php.ini的display_errors=On且error_reporting=E_ALL时,会显示所有的错误和提示。调试的时候最好打开进行纠错。如果用以前的php写法,报错信息多是undefinedvariables。赋值前调用变量时会有提示。解决办法是检测或者屏蔽,比如要显示$foo,可以if(isset($foo))echo$foo或者echo@$foo【4】headeralreadysent这个错误一般出现在你使用HEADER的时候,可能有以下几个原因:1.你在使用HEADER之前PRING或ECHO2.你当前文件前面有一个空行3.你可能INCLUDE一个文件,文件末尾有一个空行或者输出也会出现这个错误。#p#【5】修改php.ini后没有变化。重新启动Web服务器,如IIS、Apache等,然后将应用最新的设置。[6]有时sql语句不起作用,对数据库的操作失败。最简单的调试方式就是回显那条sql,看能否获取到变量的值。[7]include和require区别不大。如果要包含的文件不存在,include会提示一个通知,然后继续执行后面的语句。require会提示致命错误并退出。据测试,在win32平台下,都是先包含后执行,所以包含文件中最好不要有include或require语句,会造成目录混乱。可能在*nux下情况不一样,暂时还没有测试。如果一个文件不想被多次包含,可以使用include_once或者require_once##读写文档数据:functionr($file_name){$filenum=@fopen($file_name,"r");@flock($filenum,LOCK_SH);$file_data=@fread($filenum,filesize($file_name));@fclose($filenum);return$file_data;}函数w($file_name,$data,$method="w"){$filenum=@fopen($file_name,$method);flock($filenum,LOCK_EX);$file_data=fwrite($filenum,$data);fclose($filenum);return$file_data;}【8】isset和empty的区别都是用来测试变量的,但是isset是测试变量是否赋值,empty是测试赋值的变量是否为空。如果一个变量没有赋值,在PHP中是允许引用的,但是会有notice提示。如果给一个变量赋了一个空值,$foo=""or$foo=0or$foo=false,那么empty($foo)返回true,isset($foo)也返回true,也就是说赋一个空value不会注销变量。要取消设置变量,请使用unset($foo)或$foo=NULL。[9]mysql查询语句包含关键字php在查询mysql时,有时mysql的表名或列名会有关键字,这时候查询就会出错。比如表名是order,查询的时候就会报错。简单的方法就是在SQL语句中的表名或列名后面加上`[abovethetabkey]来区分,比如select*from`order`。[10]通过HTTP协议一次上传多个文件有两种方式,是同一种方式的两种实现。具体程序需要自己设计1、在表单中设置多个文件输入框,用数组命名,如下:";print_r($_FILES);echo"
";2.在表单中设置多个文件输入框,但名称不同,如下:="file">";print_r($_FILES);echo"
";
