PDO: bindParam versus bindValue

绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或问号占位符。 不同于 PDOStatement::bindValue() ,此变量作为引用被绑定,并只在 PDOStatement::execute() 被调用的时候才取其值。

http://php.net/manual/zh/pdostatement.bindparam.php

[With bindParam] Unlike PDOStatement::bindValue(), the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.

So, for example:

$sex = 'male'; $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex'); $s->bindParam(':sex', $sex); // use bindParam to bind the variable $sex = 'female'; $s->execute(); // executed with WHERE sex = 'female' Read More

A、MX、CNAME、URL、NS、AAAA解析类型的区别

A记录

什么情况下会用到A记录?
[如果需要将域名指向一个ip地址,就需要添加A记录]

MX记录(Mail Exchange):邮件交换记录

什么情况下会用到MX记录?
[如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录] Read More

GitLab via Nginx without SSL

upstream gitlab { server unix:/home/git/gitlab/tmp/sockets/gitlab.socket; # server 127.0.0.1:9292; } server { listen 80; server_name git.example.com; server_tokens off; root /home/git/gitlab/public; access_log /var/log/nginx/gitlab_access.log; error_log /var/log/nginx/gitlab_error.log; location / { try_files $uri $uri/index.html $uri.html @gitlab; } location @gitlab { proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_set_header X-Forwarded-Proto http; proxy_set_header X-Forwarded-Ssl off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://gitlab; } } Read More

openWRT网关解决pptp vpn穿透NAT的方法

使用openwrt做网关路由器,会存在内网windows客户端 PPTP拨号无法连接外网pptp服务器的问题!错误号:619!
PPTP方式的VPN使用了GRE协议,这个协议跟TCP/UDP是同一级的协议。因为GRE协议没有端口的概念,LINUX不能像TCP/UDP那样IP伪装。所以,LINUX网关后面的pptp vpn客户机连接vpn时总会遇见这种那种的问题。
也就是所谓
pptp pass through
PPTP VPN协议 NAT穿透性问题 Read More

PHP-FPM Configuration

;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; [global] ;PID文件的位置。默认为空 pid = /var/run/php-fpm/php-fpm.pid ;错误日志的位置 error_log = /var/log/php-fpm/error.log ;错误级别。 ;可用级别为: ; alert(必须立即处理), ; error(错误情况), ; warning(警告情况), ; notice(一般重要信息), ; debug(调试信息)。 ; 默认:notice log_level = error ;如果子进程在 emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 ;SIGBUS退出信息号,则FPM会重新启动。0 表示“关闭该功能”。默认值:0(关闭) emergency_restart_threshold = 0 ;emergency_restart_interval 用于设定平滑重启的间隔时间。这么做有助于解决加速器中共享内存的使用问题。 ;可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭) emergency_restart_interval = 0 ;设置子进程接受主进程复用信号的超时时间。 ;可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭) process_control_timeout = 0 ;设置 FPM 在后台运行。设置“no”将 FPM 保持在前台运行用于调试。默认值:yes daemonize = yes [www] ;设置接受 FastCGI 请求的地址。可用格式为:'ip:port','port','/path/to/unix/socket'。每个进程池都需要设置 listen = 127.0.0.1:9000 ;设置 listen(2) 的半连接队列长度。“-1”表示无限制。默认值:-1 listen.backlog = -1 ;设置允许连接到 FastCGI 的服务器 IPV4 地址。等同于 PHP FastCGI (5.2.2+) 中的 FCGI_WEB_SERVER_ADDRS 环境变量。 ;仅对 TCP 监听起作用。每个地址是用逗号分隔,如果没有设置或者为空,则允许任何服务器请求连接。默认值:any listen.allowed_clients = 127.0.0.1 ;如果使用,表示设置 Unix 套接字的权限。在Linux中,读写权限必须设置,以便用于 WEB 服务器连接。 ;在很多 BSD 派生的系统中可以忽略权限允许自由连接。默认值:运行所使用的用户和组,权限为 0666 ;listen.owner = nobody ;参见 listen.owner ;listen.group = nobody ;参见 listen.owner ;listen.mode = 0666 ;FPM 进程运行的Unix用户。必须设置 user = apache ;FPM 进程运行的 Unix 用户组。如果没有设置,则默认用户的组被使用 group = apache ;设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置 ; static - 子进程的数量是固定的(pm.max_children) ; ondemand - 进程在有需求时才产生(当请求时,与 dynamic 相反,pm.start_servers 在服务启动时即启动 ; dynamic - 子进程的数量在下面配置的基础上动态设置: ; pm.max_children, ; pm.start_servers, ; pm.min_spare_servers, ; pm.max_spare_servers pm = dynamic ;pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置 ;该选项设置可以同时提供服务的请求数限制。 ;类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量 pm.max_children = 50 ;设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。 ;默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2 pm.start_servers = 5 ;设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置 pm.min_spare_servers = 5 ;设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置 pm.max_spare_servers = 35 ;设置每个子进程重生之前服务的请求数。 ;对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 '0' 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。 ;默认值:0 ;pm.max_requests = 500 ;FPM 状态页面的网址。如果没有设置,则无法访问状态页面,默认值:无 ;pm.status_path = /status ;FPM 监控页面的 ping 网址。如果没有设置,则无法访问 ping 页面。 ;该页面用于外部检测 FPM 是否存活并且可以响应请求。请注意必须以斜线开头(/) ;ping.path = /ping ;用于定义 ping 请求的返回响应。返回为 HTTP 200 的 text/plain 格式文本。默认值:pong ;ping.response = pong ;设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的 'max_execution_time' 因为某些特殊原因没有中止运行的脚本有用。 ;设置为 '0' 表示 'Off'。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。 ;默认值:0(关闭) ;request_terminate_timeout = 0 ;当一个请求该设置的超时时间后,就会将对应的 PHP 调用堆栈信息完整写入到慢日志中。 ;设置为 '0' 表示 'Off'。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。 ;默认值:0(关闭) ;request_slowlog_timeout = 0 ;慢请求的记录日志。默认值:#INSTALL_PREFIX#/log/php-fpm.log.slow slowlog = /var/log/php-fpm/www-slow.log ;设置文件打开描述符的 rlimit 限制。默认值:系统定义值 ;rlimit_files = 1024 ;设置核心 rlimit 最大限制值。可用值:'unlimited',0 或者正整数。默认值:系统定义值 ;rlimit_core = 0 ;启动时的 Chroot 目录。所定义的目录需要是绝对路径。如果没有设置,则 chroot 不被使用 ;chroot = ;设置启动目录,启动时会自动 Chdir 到该目录。所定义的目录需要是绝对路径。默认值:当前目录,或者根目录(chroot时) ;chdir = /var/www ;重定向运行过程中的 stdout 和 stderr 到主要的错误日志文件中。 ;如果没有设置,stdout 和 stderr 将会根据 FastCGI 的规则被重定向到 /dev/null。默认值:无 ;catch_workers_output = yes ;security.limit_extensions = .php .php3 .php4 .php5 ;给运行池传递环境变量和设置 PHP 的配置值 ;env[HOSTNAME] = $HOSTNAME ;env[PATH] = /usr/local/bin:/usr/bin:/bin ;env[TMP] = /tmp ;env[TMPDIR] = /tmp ;env[TEMP] = /tmp ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f justmepzy@gmail.com ;php_flag[display_errors] = off php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 128M ;php_value[session.save_handler] = files ;php_value[session.save_path] = /var/lib/php/session Read More

JavaScript 的条件表

'' == '0' //false 0 == '' //true 0 == '0' //true false == 'false' //false false == '0' //true false == undefined //false false == null //false null == undefined //true " " == 0 //true Read More

Saving PHP Sessions in Redis

phpinfo查看是否安装redis支持

Session Support    enabled
Registered save handlers    files user redis
Registered serializer handlers    php php_binary igbinary

修改配置文件php.ini

session.save_handler = redis session.save_path="tcp://hostname:6379" #参考/etc/php.d/redis.ini中的例子 Read More

Using PHP Code To Saving PHP Sessions in Redis

如果不想修改php配置存储session,可以通过实现SessionHandlerInterface来存储session到redis中.

PHP Session管理中的几个方法

open
close
read
write
destory
gc

在PHP5.4之前的版本中,我们需要指定session_set_save_handler()函数的参数(6个可调用一个函数或方法处理每个任务)。在5.4和更高版本中,我们可以创建一个类实现SessionHandlerInterface接口,并通过一个实例来代替。 Read More

Transmission Installation Tutorial via CentOS

安装

yum instal -y transmission transmission-deamon transmission-cli transmission-common

配置

/etc/init.d/transmission-daemon stop

默认配置文件路径
/var/lib/transmission/.config/transmission

{ "alt-speed-down": 50, "alt-speed-enabled": false, "alt-speed-time-begin": 540, "alt-speed-time-day": 127, "alt-speed-time-enabled": false, "alt-speed-time-end": 1020, "alt-speed-up": 50, "bind-address-ipv4": "0.0.0.0", "bind-address-ipv6": "::", "blocklist-enabled": true, "blocklist-url": "/path/to/blocklist", "cache-size-mb": 2, "dht-enabled": true, "download-dir": "/path/to/download", "encryption": 1, "idle-seeding-limit": 30, "idle-seeding-limit-enabled": true, "incomplete-dir": "/path/to/downloading", "incomplete-dir-enabled": true, "lazy-bitfield-enabled": true, "lpd-enabled": false, "message-level": 2, "open-file-limit": 32, "peer-limit-global": 240, "peer-limit-per-torrent": 60, "peer-port": 51413, "peer-port-random-high": 65535, "peer-port-random-low": 49152, "peer-port-random-on-start": false, "peer-socket-tos": 0, "pex-enabled": true, "port-forwarding-enabled": true, "preallocation": 1, "ratio-limit": 2, "ratio-limit-enabled": false, "rename-partial-files": true, "rpc-authentication-required": true, #远程是否需要用户名、密码认证 "rpc-bind-address": "0.0.0.0", "rpc-enabled": true, #允许远程连接 "rpc-password": "", #直接输入,启动transmission后会自动加密 "rpc-port": 9999, #端口 "rpc-username": "pzyme",#用户名 "rpc-whitelist": "", "rpc-whitelist-enabled": false, #禁用白名单 "script-torrent-done-enabled": false, "script-torrent-done-filename": "", "speed-limit-down": 1000, "speed-limit-down-enabled": false, "speed-limit-up": 100, "speed-limit-up-enabled": false, "start-added-torrents": true, "trash-original-torrent-files": false, "umask": 18, "upload-slots-per-torrent": 14 } Read More