zoukankan      html  css  js  c++  java
  • PHP 易出问题记录

    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在读取大数据时,会出现读取不全的现象 










  • 相关阅读:
    hdu1546+spfa
    hdu1245+dij,堆优化
    hdu1669+二分多重匹配+二分
    hdu2389+二分匹配(Hopcroft-Karp算法)
    hdu3360+二分匹配(匈牙利算法)
    hdu4253 二分+MST (经典模型)
    本次项目开发的体会
    test

    结构图
  • 原文地址:https://www.cnblogs.com/zhaobolu/p/4372001.html
Copyright © 2011-2022 走看看