设为首页 收藏本站
查看: 479|回复: 0

[经验分享] PHP编程问题集锦

[复制链接]

尚未签到

发表于 2017-3-24 12:11:55 | 显示全部楼层 |阅读模式
  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。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-354644-1-1.html 上篇帖子: php学习总结-date 下篇帖子: php学习经验分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表