index

cate lnmp安装库

PHP 优秀资源汇集

php 将图片转成base64

The DOMDocument class

phpquery 学习笔记

phpQuery,采集网页像jQuery一样

phpquery中文手册

phpQuery中文手册(更新中)

2020-06-15

CentOS下安装Redis及Redis的PHP扩展

2019-08-15

利用 OPcache 扩展提升 PHP7 性能

TLS 1.3 VS TLS 1.2

1.添加:echo "1 * * * * /home/test" >> /user/crontabfile
2.删除:sed -i '/test/d'  /user/crontabfile
3.然后 crontab /user/crontabfile 就行了.

查看cron: crontab -l
关闭cron: crontab -r
laravel开启了opcache,每个请求平均30毫秒,还有swoole加速,redis高并发,机器学习有PHP-ML。

php7/laravel5.8/swoole/微服务

当PHP作为Apache的模块安装时,PHP没有独立的进程,而是作为模块以DLL的形式被加载到Apache中的,是随Apache的启动而启动的,而Windows下的Apache为多线程工作模式,因此PHP自然也就运行在多线程模式下。因此,这种情况下应使用PHP的线程安全版本。

在Apache中以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,故应使用PHP的非线程安全版本以提高性能。


windows安装:
vim conf/httpd.conf
LoadModule php7_module d:\php-7.3\php7apache2_4.dll
AddType application/x-httpd-php .php .html .htm

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

#设置路径
DocumentRoot "d:\phpweb\myPHP"
<Directory "d:\phpweb\myPHP">

httpd -k start
httpd -k restart
net start apache    打开服务托管
ApacheMonitor.exe

改名php.ini,打开extesion设置

升级PHP

升级将覆盖php.ini
upgrade_php.sh

安装fileinfo
cd php_7.2.28
find . -name fileinfo
cd ext/fileinfo

phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

vim /usr/local/php/etc/php.ini
extesion=fileinfo.so

windows安装apache + php + mysql

apache下载地址:
https://www.apachehaus.com/cgi-bin/download.plx

php下载地址(Thread Safe版本):
https://windows.php.net/download/

mysql下载地址:
https://dev.mysql.com/downloads/installer/

#安装openssl v1.1.1以上版本(支持TLSv1.3)
#http://slproweb.com/products/Win32OpenSSL.html
#https://www.openssl.org/source/

Apache24目前不支持TLSv1.3, httpd.conf文件注释如下行:
# Define ENABLE_TLS13 "Yes"

设置windows环境变量
path +=d:\php-71;d:\php-71\ext;

以管理员身份运行httpd -k install初始化服务
(httpd -k start  启动服务)

***由于httpd.conf中配置php模块,apache和php要选相同的VC版本

设置php.ini
extension_dir = '/ext'
extenstion=php_mysqli.dll
extension=php_mbstring.dll

2019-01-15

laravel导入数据出错

php遇到Allowed memory size of 134217728 bytes exhausted问题解决方法 php.ini修改: memory_limit=1280M

PHP文件包含漏洞攻防实战

在php 5.2以后添加,为系统安全,php.ini增加设置:
allow_url_fopen = On (允许打开URL文件,预设启用)
allow_url_include = Off (禁止引用URL文件,新版增加功能,预设关闭)

其实也不能完全阻止远端调用及其所带来的安全隐忧,
而且它们只是保护了标记为URL的句柄, 也就是说只能影响http(s)和ftp(s)的调用, 
但对包含其他标记的远端调用,例如对PHP5.2.0
新版所提供的php和data则无能为力,而这些调用一样会导致注入风险

打开php.ini, 将default_socket_timeout值调大。如:default_socket_timeout=360(默认为-1或60)

blob:https://www.xiami.com/5833bba0-b770-40e0-9226-9197b239e898

深入理解xhr的responseType中blob和arrayBuffer

PHP 读取文件,返回二进制流

$file_dir = xxxxx;

//使用file_exists判断文件是否存
ob_end_clean();
ob_start();

//打开文件
$handler            = fopen($file_dir, 'r+b');
$file_size          = filesize($file_dir);

//声明头信息
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".$file_size);
Header("Content-Disposition: attachment; filename=" . basename( $file_dir));

// 输出文件内容
echo fread($handler,$file_size);
fclose($handler);
ob_end_flush();
exit;

2018-10-05

redis在PHP中的基本使用案例

CentOS下Redis的安装

安装并配置redis

yum install tcl

下载并安装
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
tar zxvf redis-4.0.11.tar.gz
cd redis_4.0.11
make && make install

cp utils/redis_init_script /etc/init.d/redis_6379
REDISPORT为端口号,对应配置文件名

mkdir /etc/redis/           #存放redis配置文件
mkdir /var/redis/6379/      #存放redis持久化文件

cp redis.conf /etc/redis/6379.conf

#vim /etc/redis/6379.conf
daemonize yes                       #设置为守护进程模式
pidfile /var/run/redis_6379.pid     #设置redis的pid文件
port 6379
dir /var/redis/6379                 #设置持久化文件的位置

启动和关闭服务
/etc/init.d/redis_6379 start
/etc/init.d/redis_6379 stop

设置开机启动
#vim /etc/init.d/redis_6379
chkconfig: 2345 90 10
description: Redis is a persistent key-value database

chkconfig redis_6379 on

启动和关闭服务
service redis_6379 start
service redis_6379 stop

安全关闭redis
redis-cli SHUTDOWN


安装PHP redis扩展
wget https://github.com/nicolasff/phpredis/archive/master.zip
unzip master.zip
cd phpredis
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
make test

#vim /usr/local/php/etc/php.ini
extension=redis.so

nginx -s reload
service php-fpm restart

2018-02-06

--disable-web-security --user-data-dir=C:\mychromeuserdata

VK评论系统API


APC与Memcached

APC是PHP的一个扩展,会加载在PHP的进程中,除了可以将PHP代码解释成OPCode保存在内存中之外,还能在PHP的进程之间使用共享内存(系统内核的数据结构)来保存数据,而且完全透明
而Memcached是一个外部的服务,要通过tcp或udp的网络协议来共享/缓存数据
好处是可以在多台机器之间共享、缓存数据,或者是与其他非php应用共享数据,
但由于使用网络协议进行交互,而且在交互过程中需要对php对象进行序列化、反序列化等,延迟较直接集成在PHP进程中的APC大很多
Facebook同时使用了APC和Memcache作了两层缓存

APC更多时候用作Opcode Cache, 而MemCache是用作ContentCache. 
APC用作Content Cache的时候, 它是单机Cache. 
而MemCache可以实现多机共享. 所以类似一些Session共享问题, 就只能用类似MemCache的缓存.

Apache+PHP的和Nginx+PHP的区别

Apache 一般把 PHP 当作自己的一个模块来启动;
Nginx 则是把 HTTP 请求变量(如 get,user_agent)转发给 PHP 独立进程,与 Nginx 进行通信,称为 fastcgi 运行方式。
因此,为 Apache 所编译的 PHP 是不能用于 Nginx 的;为 Nginx 所编译的 PHP 要以 fpm(fastcgi,fastcgi 通俗地讲就是两个程序之间的通信)方式运行。

nginx配置:
location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www/test02$fastcgi_script_name;
    }

fastcgi_pass 用来指定php-fpm监听的地址或者socket
fastcgi_index index.php #设定访问根目录默认去找的文件
fastcgi_param SCRIPT_FILENAME /data/www/test02$fastcgi_script_name #设置访问根目录时默认寻找的文件

php-fpm配置:
php-fpm.conf
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic

Session

PHP在使用默认的 session.save_handler = files 方式时,PHPSESSIONID的生产算法原理如下:
hash_func = md5 / sha1 #可由php.ini配置
PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器)

黑客如果要猜出某一用户的PHPSESSIONID,则他也必须知道“客户端IP、当前时间(秒、微妙)、随机数”等数据方可模拟。

2018-01-24

PHP命令行

php -h          //获取帮助
php test.PHP
php -f test.PHP
php -r 'phpinfo();'
php -r 'phpinfo();' | grep php.ini  //获取配置文件所在的位置
php --ini                           //获取配置文件所在的位置

2018-01-21

PHP使用CURL详解

 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net");
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_HEADER,0);
 $output = curl_exec($ch);
 if($output === FALSE ){
 echo "CURL Error:".curl_error($ch);
 }

$info = curl_getinfo($ch);
echo $info['url'] . $info['total_time']

 curl_close($ch);

2017-11-14

heredoc技术(EOT EOD EOF)

print <<<EOF
            <li class="ui-border-t">
                <div class="ui-list-img">
                    <span style="background-image:url(https://www.hkcd.com/{$news['image']})"></span>
                </div>
                <div class="ui-list-info">
                    <h4 class="ui-nowrap">{$news['title']}</h4>
                    <p class="ui-nowrap">{$news['jianjie']}</p>
                </div>
            </li>
EOF;

2017-09-25

在php.ini中,找到disable_functions选项,看看后面是否有proc_open函数被禁用了,如果有的话,去掉即可

linux环境安装php fileinfo扩展

2017-05-12

处理跨域的方法2 -- XHR2

“XHR2” 全称 “XMLHttpRequest Level2” 是HTML5提供的方法,对跨域访问提供了很好的支持,并且还有一些新的功能。
* IE10一下的版本都不支持
* 只需要在服务器端头部加上下面两句代码:
  header( "Access-Control-Allow-Origin:*" );
  header( "Access-Control-Allow-Methods:POST,GET" );

JSONP中的回调函数

<script>
function show(json){ //函数show
    alert(json.s);
}
</script>
//wd=web,搜索关键词为web;cb=show,回调函数为show
<script src="https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=web&cb=show">
</script>
/*src的请求结果为:
show({q:"web",p:false,s:["webqq","webqqµÇ½","web of science","web΢ÐÅ","webstorm","webservice","΢²
©","websocket","weblogic","webex"]});
*/
客户端把回调函数的名字传送给服务端,
然后服务端生成一段js代码且代码中包含着对回调函数的调用,
然后服务端把这段代码返回给客户端,
然后客户端执行这段代码的过程中调用了回调函数,
然后你就可以在回调函数里面处理数据了

总结Ajax跨域调用问题

PHP AJAX JSONP实现跨域请求使用实例

PHP Ajax 跨域问题最佳解决方案