`
tiandirensoon
  • 浏览: 598173 次
文章分类
社区版块
存档分类
最新评论

PHP编程问题集锦

 
阅读更多

1. Win32下apache2用get方法传递中文参数会出错
test.php?a=你好&b=你也好
传递参数是会导致一个内部错误
解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)

2. win32下的session不能正常工作
php.ini默认的session.save_path = /tmp 这显然是linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,
例如session.save_path = c:/windows/temp

3. include和require的区别
两者没有太大的区别,如果要包含的文件不存在, include提示notice,然后继续执行下面的语句,require提示致命错误并且退出,据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。

4. isset()和empty()的区别
两者都是测试变量用的。但是 isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。如果一个变量没被赋值就引用在php里是被允许的,但会有 notice提示。如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。
要注销一个变量,可以用 unset($foo)或者$foo=NULL。

5. mysql查询语句包含有关键字
php查询mysql的时候,有时候mysql表名或者列名会有关键字。这时候查询会有错误。例如表名是order,查询时候会出错。简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,
这样就不会因为误用关键字而出现错误。
例如select * from `order` 。

6. 数组非数字键名引号的必要性
PHP 会把数组中非数字键名没有引号引起来的键名当作是常量去获取, 当找不到的时候, 抛出一个NOTICE(Notice: Use of undefined constant ......), 然后再根据”常量名”生成一个字符串, 数组中的非数字键的键名一定要有引号,在字符串变量替换的时候, 写引号会导致错误, 虽然这种错误提示可以通过 error_reporting()进行屏蔽,但好的程序,自适应的代码是不应该通过这种方法进行伪装的。标准写法:
$array[1] = 'abc';
$array['key'] = 2; Bad: $array[key] = 2;
$string = "variable value is {$array['key']}"

另:在非数字键名不加引号的生成OPCODE中明显多一条指令:FETCH_CONSTANT

7. 使HTML/PHP格式的字符串如何照原样显示
如:
<?PHP
$str="<a href='http://www.csdn.net'>HTML</a>";
echo "被解释处理过的: ".$str;
echo htmlentities(nl2br($str));
?>

8. 一切写入数据库中的数据都应该进行必要的验证和过滤
写入前
$string = addslashes($string);
INSERT TABLE SQL
读取时
$string = stripslashes($string);
显示时
$string = htmlspecialchars(nl2br($string))

9. PHP文件中的结尾符号 ?>
在文件中 ?> 结尾符号它不是必需的。有时就可以不必要加上,这样可以避免产生一些难于调试的错误问题。例如,在使用header()函数来重定向(redirect)时,如果在其前面某个包含文件中 ?> 后面不小心加上了空格就会出现错误。

10. 正则表达式URL 我在项目常用到的
$link = "A http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 asdf/asd.sdf http://www.s.flash你好 asdfas./asd.sd http://bbs.400.com.cn/gg/wjdpy.mp3 http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371";
$pattern = "/(https{0,1}:////[a-zA-Z0-9_/-]+/.[a-zA-Z0-9_/-/./%/?=///&/+#]+)/";
preg_match_all($pattern, $link, $matches);
print_r($matches[0]);
结果:Array ( [0] => http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 [1] => http://www.s.flash [2] => http://bbs.400.com.cn/gg/wjdpy.mp3 [3] => http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 )


11. PHP中的JSON数据存储格式
在非UTF-8编码下,中文字符将不能被json_encode,否则结果会是空值。所以,如果你使用gb2312编写PHP代码,那么就需要将包含中文的内容使用iconv或者mb转为UTF-8再进行json_encode。

1. Win32下apache2用get方法传递中文参数会出错
test.php?a=你好&b=你也好
传递参数是会导致一个内部错误
解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)

2. win32下的session不能正常工作
php.ini默认的session.save_path = /tmp 这显然是linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,
例如session.save_path = c:/windows/temp

3. include和require的区别
两者没有太大的区别,如果要包含的文件不存在, include提示notice,然后继续执行下面的语句,require提示致命错误并且退出,据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。

4. isset()和empty()的区别
两者都是测试变量用的。但是 isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。如果一个变量没被赋值就引用在php里是被允许的,但会有 notice提示。如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。
要注销一个变量,可以用 unset($foo)或者$foo=NULL。

5. mysql查询语句包含有关键字
php查询mysql的时候,有时候mysql表名或者列名会有关键字。这时候查询会有错误。例如表名是order,查询时候会出错。简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,
这样就不会因为误用关键字而出现错误。
例如select * from `order` 。

6. 数组非数字键名引号的必要性
PHP 会把数组中非数字键名没有引号引起来的键名当作是常量去获取, 当找不到的时候, 抛出一个NOTICE(Notice: Use of undefined constant ......), 然后再根据”常量名”生成一个字符串, 数组中的非数字键的键名一定要有引号,在字符串变量替换的时候, 写引号会导致错误, 虽然这种错误提示可以通过 error_reporting()进行屏蔽,但好的程序,自适应的代码是不应该通过这种方法进行伪装的。标准写法:
$array[1] = 'abc';
$array['key'] = 2; Bad: $array[key] = 2;
$string = "variable value is {$array['key']}"

另:在非数字键名不加引号的生成OPCODE中明显多一条指令:FETCH_CONSTANT

7. 使HTML/PHP格式的字符串如何照原样显示
如:
<?PHP
$str="<a href='http://www.csdn.net'>HTML</a>";
echo "被解释处理过的: ".$str;
echo htmlentities(nl2br($str));
?>

8. 一切写入数据库中的数据都应该进行必要的验证和过滤
写入前
$string = addslashes($string);
INSERT TABLE SQL
读取时
$string = stripslashes($string);
显示时
$string = htmlspecialchars(nl2br($string))

9. PHP文件中的结尾符号 ?>
在文件中 ?> 结尾符号它不是必需的。有时就可以不必要加上,这样可以避免产生一些难于调试的错误问题。例如,在使用header()函数来重定向(redirect)时,如果在其前面某个包含文件中 ?> 后面不小心加上了空格就会出现错误。

10. 正则表达式URL 我在项目常用到的
$link = "A http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 asdf/asd.sdf http://www.s.flash你好 asdfas./asd.sd http://bbs.400.com.cn/gg/wjdpy.mp3 http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371";
$pattern = "/(https{0,1}:////[a-zA-Z0-9_/-]+/.[a-zA-Z0-9_/-/./%/?=///&/+#]+)/";
preg_match_all($pattern, $link, $matches);
print_r($matches[0]);
结果:Array ( [0] => http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 [1] => http://www.s.flash [2] => http://bbs.400.com.cn/gg/wjdpy.mp3 [3] => http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 )


11. PHP中的JSON数据存储格式
在非UTF-8编码下,中文字符将不能被json_encode,否则结果会是空值。所以,如果你使用gb2312编写PHP代码,那么就需要将包含中文的内容使用iconv或者mb转为UTF-8再进行json_encode。

分享到:
评论

相关推荐

    PHP--扩展编程PHP扩展编程PHP扩展编程

    PHP扩展编程PHP扩展编程PHP扩展编程PHP扩展编程PHP扩展编程PHP扩展编程

    PHP编程网络大讲堂

    本书全面介绍PHP编程知识,全书共分4篇16章,内容包括:PHP基础入门篇(第1~4章),介绍PHP环境的搭建、PHP配置文件和指令、数据类型和流程控制语句,以及PHP下进行面向对象编程等知识;PHP数据处理篇(第5~10章)...

    PHP编程PHP 编程PHP 编程PHP 编程PHP 编程PHP 编程

    PHP 编程PHP 编程PHP 编程PHP 编程PHP 编程PHP 编程

    php5权威编程

    《PHP5权威编程》是由美国人古曼兹、贝肯、瑞桑斯编著,简张桂翻译,电子工业出版社于2007年12月1日出版的关于PHP5应用程序的技术类图书。该书全面介绍了PHP 5中的新功能、编程方法及设计模式,还分析阐述了PHP 5...

    PHP编程一百例(一些php的编程实例)

    PHP编程一百例,php编程中的一些实例对于初学都应该有一定的帮助.

    PHP5权威编程 英文版

    第4章 PHP 5高级面向对象编程和设计模式 85 第5章 如何用PHP写一个Web应用 111 第6章 使用PHP 5访问数据库 149 第7章 错误处理 191 第8章 PHP 5中处理XML 219 第9章 主流扩展 261 第10章 使用PEAR .. 345 第...

    PHP编程一百例

    PHP编程一百例PHP编程一百例PHP编程一百例PHP编程一百例

    PHP编程规范 PHP编程规范

    PHP编程规范PHP编程规范PHP编程规范PHP编程规范PHP编程规范PHP编程规范PHP编程规范PHP编程规范PHP编程规范PHP编程规范

    ZendAPI:深入PHP内核编程

    ZendAPI:深入PHP内核编程 ZendAPI:深入PHP内核编程 ZendAPI:深入PHP内核编程 ZendAPI:深入PHP内核编程 ZendAPI:深入PHP内核编程

    php高级编程-精通php

    20天轻松精通php语法,学会用php编程,开发项目。

    PHP5 权威编程

    我建议大家学习一下面向对象方面知识,PHP这方面的书不太多,建议看Java面向对象编程、Java编程思想、J2EE这些书。PHP语言基础方面,建议认真地把PHP5权威编程这本书好好读完。另外不光要读,还要照着书中的讲解动手...

    《PHP5权威编程》

    第4章 PHP 5高级面向对象编程和设计模式 第5章 如何用PHP写一个Web应用 第6章 使用PHP 5访问数据库 第7章 错误处理 第8章 PHP 5中处理XML 第9章 主流扩展 第10章 使用PEAR 第11章 重要的PEAR包 第12章 创建PEAR的...

    php编程100例

    php编程100例 便于开发借鉴 经典的实例

    PHP编程研发技术

    PHP编程研发技术,包括文档,从0--100的技术您值得拥有

    PHP编程与实例

    PHP编程与实例,绝对是公认的PHP入门指南,值得一看的

    中文PHP编程系统3.6

    中文PHP编程系统,集成大量PHP函数和中文说明,可用英文和拼音首写输入

    php java编程手册

    php编程手册,网页编程,方便编程,很好的学习工具

    php网络编程从入门到精通.rar

    php网络编程从入门到精通,动画演示,附源代码。

    PHP4 编程与实例

    PHP4 编程与实例 PHP4 编程与实例 PHP4 编程与实例

    PHP编程开发手册大全

    涵盖大部分的PHP编程知识,是PHP开发人员的必备手册!

Global site tag (gtag.js) - Google Analytics