PHP下好用的图表库

amcharts,功能丰富,使用简单,文档完善。缺点是功能太丰富,文档也不好翻

https://www.amcharts.com

php7.4.9增加gd扩展

全部以源码编译方式为例,在centos7上操作

1、下载
https://www.php.net/distributions/php-7.4.9.tar.gz

2、准备(应该有多余的库
yum -y install patch gd-devel libxml2-devel libmcrypt-devel openldap-devel mhash-devel curl-devel libpng-devel libjpeg-devel freetype-devel sqlite-devel oniguruma-devel zlib-devel

3、编译安装

方式一:将gd静态编译到PHP中
php
cd /xxx/php-7.4.9/
./configure
--prefix=/usr/local/php
--enable-fpm
[b]--enable-gd[/b]
--with-freetype
--with-jpeg
--with-iconv
--with-zlib
--enable-xml
--disable-rpath
--enable-bcmath
--enable-shmop
--enable-sysvsem
--enable-inline-optimization
--with-curl
--enable-mbregex
--enable-mbstring
--with-openssl
--with-mhash
--enable-pcntl
--enable-sockets
--with-xmlrpc
--enable-soap  
--without-pear
--enable-ftp

make
make install

无需配置php.ini


方式二:将gd编译成扩展
cd /xxx/php-7.4.9/ext/gd
[b]/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-freetype --with-jpeg --enable-gd[/b]
make
make install

配置php.ini
[b]extension=gd[/b]

PHP的file_get_contents不支持gzip编码过的页面?

PHP的file_get_contents获取远程页面内容,如果是gzip编码过的,返回的字符串就是编码后的乱码

1、解决方法,找个ungzip的函数来转换下

2、给你的url加个前缀,这样调用
[quote]$content = file_get_contents("compress.zlib://".$url);[/quote]
无论页面是否经过gzip压缩,上述代码都可以正常工作!

PHP 4.3.0以后版本支持,还可以用于fopen之类的函数~!

如何在Nginx中搭建HTTPS站点

这里采取的是在StartSSL申请免费证书,使用Nginx + php-cgi(php-fpm)的方式建立HTTPS加密的站点。

首先在StartSSL注册,点左上角图标“Sign-up For Free”,注册的过程要填写比较详细的地址、电话什么的,否则可能被拒,具体注册教程可以Google一下,很多介绍,也很简单。注册过程要验证邮件地址,注册成功之后会自动安装一个StartCom Free Certificate Member的证书,这个就是用来登录的,搞证书的完整登录用证书也算是门当户对。必须用IE浏览器注册,因为要装ActiveX控件。


注册之后,点击Authenticate,再进入Control Panel,  先使用Validations Wizard验证域名,再使用Certificates Wizard创建证书,类型为“Web Server SSL /TLS Certificate”。在接下来的步骤里面,可以在线创建私钥,但我发现在网站上直接输入密码,提交会有一个JavaScript错误,导致无法继续,换了浏览器和机器也是一样。

所以我们可以选择创建私钥的步骤Skip,然后把自己采用自己创建的CSR用用本工具打开,粘贴到下一步“Submit Certificate Request (CSR)”的文本框中;下面用到的openssl是OpenSSL库里面的一个工具。
1)创建一个4096长度的私钥
openssl genrsa -des3 -out server.key 4096

2)创建一个CSR (Certificate Signing Request)
openssl req -new -key server.key -out server.csr
其中challenge password为空

这样就可以得到一个CRT证书文件,将其从页面中粘贴到本地一个文本文件,并改名为CRT后缀即可。今后要可以在Control Panel -> Tool Box ->Retrieve Certificate重新获得。


Nginx配置很简单,最重要的配置红色标识。一些PHP程序可能会使用_SERVER["HTTPS"]参数来判断当前是HTTPS还是HTTP,这个会影响程序生成的一些链接的前缀,如果检测不正确,可能会导致访问HTTPS站点时候,浏览器提示“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”,而由于是采用反向代理的方式,透过Nginx访问php-cgi,而php-cgi不是以HTTPS方式运行的,所以必须要显示的制定生成参数fastcgi_param HTTPS on; 

server
{
    listen a.b.c.d:443;

    access_log /xxx/ssl.access.log main;
    error_log  /xxx/ssl.error.log;


    root /xxx/;
    index index.php index.html index.htm;


    ssl on;
    ssl_certificate /xxx/server.crt;
    ssl_certificate_key /xxx/server.key;

    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;


    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        fastcgi_param HTTPS on; 
        include fastcgi_params;
    }


    location ~ /\.ht {
        deny all;
    }

}


启动试一试应该就可以了,但每次启动Nginx的时候都会提示输入私钥密码,这个可以这样解决:
1) 去除密码
openssl rsa -in server.key -out server.nopass.key

2)把Nginx的配置替换为
ssl_certificate_key /xxx/server.nopass.key;即可


经过测试,在IE 7.0.5730.11、Chrome 4.1.249.1064版本中使用正常;在Firefox 3.5.3会提示“此连接是不受信任的”,这是因为StartSSL的根证书还没有被FF认可,只是被M$和Google认可,添加个例外就可以继续访问了,加密功能是一样的,不过变得和自己的做的证书一样了。免费的不求太完美,将就用。

JSON在PHP中的应用

无为而为 说两句:
忘记了这种轻量级数据交换格式名字,在Google上狂搜索“XML 简化格式”,找不到,原来是JSON,JavaScript Object Notation
原文地址:http://www.openphp.cn/blog.php?blog_id=12