设为首页 加入收藏

TOP

PHP开发要点与技巧总结(二)(三)
2019-08-23 00:31:36 】 浏览:72
Tags:PHP 开发 要点 技巧 总结
包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。此规则的一个例外是魔术常量,它们是在发生包含之前就已被解析器处理的。
  • fwrite/fputs: 当 $fwrite=0 时,下列代码可能导致死循环。参考http://php.net/manual/vote-note.php?id=96951&page=function.fwrite&vote=up

    // BROKEN function - infinite loop when fwrite() returns 0s 
    function fwrite_stream($fp, $string) { 
        for ($written = 0; $written < strlen($string); $written += $fwrite) { 
            $fwrite = fwrite($fp, substr($string, $written)); 
            if ($fwrite === false) { 
                return $written; 
            } 
        } 
        return $written; 
    } 
  • Windows PHP版本选择TS & NTS 
  • string字串操作:一个由字节组成的数组再加上一个整数指明缓冲区长度。并无如何将字节转换成字符的信息,由程序员来决定。字符串由什么值来组成并无限制;特别的,其值为 0(“NUL bytes”)的字节可以处于字符串任何位置(不过有几个函数,在本手册中被称为非“二进制安全”的,也许会把 NUL 字节之后的数据全都忽略)。
    $a = 'fsafsfsfsfsff';
    // sa
    var_dump($a[1] . ${2});
  • PHP 函数/语法结构与命名空间
    (1)在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称。
    
    (2)对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量。
    
    (3)在用户自定义命名空间中,PHP内核函数可以被重新定义,但语言结构却不行。
  • namespace 和 use:use常量和函数。命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字。
    <?php
    namespace test;
    define('MESSAGE', 'Hello world!');
    ?>
    namespace Name\Space {  
        const FOO = 42;  
        function f() { echo __FUNCTION__."\n"; }  
    }  
    namespace Xx {  
        use const Name\Space\FOO;  
        use function Name\Space\f;  
    
        echo FOO."\n";  
        f();  
    } 
  • 大型整数:Large integers must be specified as strings - otherwise, PHP will coerce them to floats, resulting in a loss of precision.
  • 高精度计算:BC Math & GMP
    // JS: 0.0006 * 100000 = 59.99999999999999
    
    // php: 100000000 * 0.0006 = 59999.99999999999
    
    // php:bcmul(100000000, 0.0006, 0) = 60;

     

  • HEIF / ImageMagick安装
    #安装依赖包(库),不同平台包(库)名可能不同。如果以安装可免,通过yum list installed查看。 
    yum -y install gcc-c++ libtool pkg-config libjpeg-devel libpng-devel

    #安装libde265(HEVC Decoder / h.265),没有安装libx265(libheif的HEVC Encoder)
    wget https://github.com/strukturag/libde265/archive/frame-parallel.tar.gz
    tar zxvf frame-parallel.tar.gz
    cd libde265-frame-parallel
    ./autogen.sh
    ./configure
    make
    make install
    #sudo ldconfig /usr/local/lib
    #make uninstall & make distclean

    #安装libheif
    wget https://github.com/strukturag/libheif/archive/master.tar.gz
    tar zxvf master.tar.gz
    cd libheif-master
    ./autogen.sh
    #下边这条命令也可以换成 ./configure libde265_CFLAGS='-I/usr/local/include' libde265_LIBS='-lde265'
    #libde265.pc 所在的目录

    ./configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

    make
    make install
    #可能需要加载动态库配置/etc/ld.so.conf
    #sudo ldconfig /usr/local/lib
    #heif-convert能把heic转换成png、jpg
    #/usr/local/bin/heif-convert 1.heic 1.jpeg 将报 “Unknown file type in 1.jpeg”错误
    #/usr/local/bin/heif-convert 1.heic 1.jpg
    #安装imagemagick
    wget http://imagemagick.org/download/ImageMagick.tar.gz
    tar xvzf ImageMagick.tar.gz
    cd ImageMagick-7.0.8
    #环境变量(env可查看所有,export/export -n可设置/删除指定环境变量)PKG_CONFIG_PATH的值为libheif.pc所在的目录。如果configure执行发生错误,请查看config.log
    ./configure --disable-openmp PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    make
    make install
    #sudo ldconfig /usr/local/lib
    #which identify
    #/usr/local/bin/identify /var/www/public/1.heic

    #安装PHP imagick扩展 pecl
    install imagick #php.ini启用扩展 extension=imagick.so

    #PHP-FPM reload #systemctl restart php-fpm
    #卸载 #pecl uninstall imagick
    $img =
  • 首页 上一页 1 2 3 4 下一页 尾页 3/4/4
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇[TCP/IP] 网络层-ARP协议 下一篇PHP基本语法

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目