PHP foreach引用缺陷

<?php
$array = array(1, 2, 3);
foreach ($array as &$v) {}
foreach ($array as $v) {}
print_r($array);
?>
实际输出:
Array
(
[0] => 1
[1] => 2
[2] => 2
)
解释: 第一次foreach的时候$v成为了一个引用变量($array[2]),如此,当第二次foreach的时候, 实际上只是在对这个引用变量($array[2])进行了若干次赋值而已。 

第一次:$array[2] = 1,此时$array各元素分别为1,2,1 
第二次:$array[2] = 2,此时$array各元素分别为1,2,2
第三次:$array[2] = 2,此时$array各元素分别为1,2,2


字符串与整型对比缺陷
<?php
  $a = 1;   $b = "1ab";   echo $a == $b;
?>
输出:

1

解释:
int $a跟string $b进行对比时,php会将string $b进行强制转换成int,即intval($b) 而强转规则是是从字符串左侧起,遇到非数字(或者小数点'.')即终止,有效部分进行强转, 即intval('1ab') = 1; 所以$a == $b输出1


访问远程http服务使用curl禁用file_get_contents
1. fopen/file_get_contents 每次请求的超时设置不稳定,会导致不同程度的夯住进程

2. fopen/file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比fopen /file_get_contents 好很多。 

3. fopen/file_get_contents 在请求HTTP时,使用的是http_fopen_wrapper,不会keeplive。而curl却可以。这样在多次请求多个链接时,curl效率会好一些。

4. fopen/file_get_contents 函数会受到php.ini文件中allow_url_open选项配置的影响。如果该配置关闭了,则该函数也就失效了。而curl不受该配置的影响。 

5. curl 可以模拟多种请求,例如:POST数据,表单提交等,用户可以按照自己的需求来定制请求。而fopen / file_get_contents只能使用get方式获取数据。 


PHP Socket通讯设计陷阱
1. 使用socket_create代替fsocketopen.fsocketopen会有比较大得概率建立连接失败

2. 大数据读取使用socket_recv代替socket_read。socket_read在读取大数据时,会出现读取不全的现象 


												

PHP 易出问题记录的更多相关文章

  1. 微信小程序和微信H5测试中易出Bug的点和注意事项

    一.微信小程序 易出Bug的点: 小程序的分享转发功能 背景:小程序项目开发基本完毕也都已经测过几轮,功能上基本没有什么问题,但是上线后却被客户发现通过分享转发小程序给别人,别人无法正常打开的情况 原 ...

  2. SAP MM 并非奇怪现象之MB5B报表查不到某一笔出库记录?

    物料号:1301002696 工厂代码:2160 MB5B,如下查询条件, 查询结果中,期初与期末库存数量都是0,期间的出库入库数量都是0.事实上该物料期初应该是有库存的.并且我用MB51相同时间段查 ...

  3. Oracle易忘知识点记录

    1.SQL Select语句完整的执行顺序: ①from子句组装来自不同数据源的数据: ②where子句基于指定的条件对记录行进行筛选: ③group by子句将数据划分为多个分组: ④使用聚集函数进 ...

  4. C与C++面试易出知识点

    .1. char c = '\72'; 中的\72代表一个字符,72是八进制数,代表ASCII码字符":". 2. 10*a++ 中a先进行乘法运算再自增(笔试中经常喜欢出这类运算 ...

  5. 【NCRE】三级网络技术 选择题易错点记录(1)

    部分易错点 连接到一个集线器的多个节点不能同时发送数据帧 嵌入式安装插座用来连接双绞线 异步串行端口 PPP 同步串行端口 PPP/HPLC 对于频繁改变位置并使用DHCP获取IP地址的DNS客户端, ...

  6. Mybatis关联查询,查询出的记录数量与数据库直接查询不一致,如何解决?

    <select id="findUserInfoListForMap"    resultMap="BaseResultMap">  SELECT  ...

  7. C/C++易错小记录

    一:对字符串的 strlen() 与 sizeof #include <string.h> #include <stdio.h> int main(void) { char* ...

  8. BD面试题1-两个大文件中找出公共记录[转载]

    转自:https://blog.csdn.net/tiankong_/article/details/77234726#commentBox 1.题目 给定a.b两个文件,各存放50亿个url,每个u ...

  9. 工厂交接班易出问题?MES系统实现精准对接

    工厂交接班制度非常的严格和复杂,而MES系统能让繁琐的交接班流程简单快捷无措.MES系统在发生事件时记录传递事件,还可以主动对事件进行分类和报告.人员可以查看和深入到以前或当前班次的个别事件. 随着工 ...

随机推荐

  1. 关于lab4实验git+近期出国手续办理

    1.下载mit jos lab4时遇到问题(关于git操作,使用,还需进一步理解) 遇到的问题 出现未合并(merge)完全的问题,操作:git add kern/init.c 之后在确认提交 方法二 ...

  2. 安装完Ubuntu 14.04要做的九件事

    www.linuxidc.com/Linux/2014-04/100411.htm 1.看看有哪些新特性 安装完之后的第一件事肯定是看看Ubuntu 14.04有哪些新的特性. Ubuntu 14.0 ...

  3. Swift利用闭包(closure)来实现传值--&gt;前后两个控制器的反向传值

    利用了大约一个多小时来搞明确OC中Blocks反向传值和Swift中Closure反向传值的区别,以下直接贴上代码: 一.第一个界面 // Created by 秦志伟 on 14-6-13. imp ...

  4. 在Spring中使用JDK定时器实现调度任务

    在Spring中使用JDK定时器实现调度任务 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 本文探讨Spring如何集成JDK的Timer定时器,实现 ...

  5. ZBLibrary不能运行的解决方法

    ADT运行   右键ZBLibrary Demo > Run as > Android Application 可能出现部分错误,解决方案如下: 右键Project(这里为ZBLibrar ...

  6. C语言实现电话本 动态开辟 信息存储于文件

    下面是我用C写的一个电话本小项目,实现的功能有:添加 删除 修改 查找 排序 清空 显示,功能还是比较全的,内存也是动态开辟的.能存储于本地,能从本地读出并显示 头文件部分代码,contact.h: ...

  7. Sublime Text 使用简介

    Sublime Text使用介绍 如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥.Sublime Text最大的优点就是跨平台,Mac和Windows ...

  8. bgycoding

    //add by zzw@曾志伟 2015-12-9 [碧桂园项目] begin if(condition.indexOf("glbdef8 = 'Y'")>0){ Stri ...

  9. NChome导出补丁包需要注意的东西

  10. Js 学习资料

    Js 语法 http://www.php100.com/manual/jquery/   jqGrid控件 http://www.trirand.com/blog/jqgrid/jqgrid.html