Hugh's Blog

Linux 安装 PHP

Linux 选择安装特定 PHP 版本,做个记录。 CentOS 安装 PHP 安装源: # centos 7 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install http://rpms.remirepo.net/e...

PHP 转换编码带 BOM 的问题

PHP 在转换文件编码时,如果遇到带有 BOM 头的话,会导致其他应用读取到的内容出现乱码,需要做单独的处理。 $content = file_get_contents('in.txt'); $encode = mb_detect_encoding($content, ['ASCII', 'GBK', &#...

PHP cURL Content Type

最近在用 PHP cURL 发送数据给接口,但是接口并没有收到数据,返回了错误信息。 使用 curl_getinfo 查看请求头,发现 Content-Type 的值是 multipart/form-data,而且后面的消息体也经过了编码,以 boundary= 开头,而接口要求的值是 application/x-www-form-urlencoded,就...

PHP LDAP 连接超时

最近在使用 PHP 连接 LDAP 服务器做用户验证,在测试域控服务器的时候,设置了超时选项,如果超时则表示无法连接服务器,一般来说,有如下的代码: $conn = @ldap_connect('ldap://1.1.1.1:389'); ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3...

PHP 数据库并发处理

下面是一些 PHP 数据库并发的简单处理方案,作个记录。 数据库信息 create table goods( id INT NOT NULL AUTO_INCREMENT, stock INT NOT NULL DEFAULT 0, PRIMARY KEY (id) ); insert into goods(stock) values(...

PHP + Redis 简单消息队列

消息队列在高并发的时候,可以缓解对数据库的压力,下面使用 PHP + Redis(list) 简单模拟下这个过程。 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $type = isset($_GET['type']) ? 'read...

PHP 排序算法

冒泡排序 冒泡排序比较简单,每一次循环从前往后依次比较,如果前者比后者大,则交换位置,就像泡泡越来越大一样,重复上面的循环,直到数组有序,最多循环次数为 n^2,可以通过添加一个交换变量来进行优化,如果一次循环中没有发生交换的话,则表明排序完成。 function bubbleSorting($arr) { $len = count($arr);...

PHP 设计模式

设计模式在很多语言都有用到,PHP 也不例外,下面是一些常见的 PHP 设计模式,做个记录。 工厂模式 平常我们获取实例,都是使用 new 来获取,如果在后期对类有修改,就需要改很多个地方,而工厂模式类可以把实例化对象封装成方法,后期修改只需修改工厂类就行。 // 工厂模式 class Factory { public static funct...

PHP Session 锁阻塞请求问题

PHP Session 默认是用文件存储的,当 Session 初始化时,即调用 session_start() 或者 session.auto_start 设置为 true 时,PHP 会在 session.save_path 下创建一个文件(如果是新会话)并锁定,然后把 Cookie ID 发送给服务器,例如文件:/var/lib/php/session...

PHP 实现异步调用

PHP 实现异步调用在客户端的话比较简单,比如在页面加载完成后 jQuery 发送 AJAX 请求,或者嵌入到 img 标签,然后 src 指向请求,之前写的这篇文章 Nginx + Google Analytics 配置 就是使用 img 标签来触发谷歌分析统计,这两种都会比较依赖于浏览器与用户。 在服务端异步调用的话可以使用 curl 与 fsocko...

PHP 调试追踪

今天有个 WordPress 的网站不能登录后台,打开页面显示下面的错误的信息: Fatal error: Call to undefined function wp_get_current_user() in /public_html/wp-includes/user.php on line 209 看了下代码,发现网站的 WordPress 版本才...

PHP 下子域名共享 Cookies

PHP 在子域名下共享 Cookies,比如登录信息。 直接使用 PHP 来处理 ini_set('session.cookie_path', '/'); ini_set('session.cookie_domain', '.domain.com'); 在 Yii2 下,需要在组件中对 ...

PHPMailer 在 SSL 配置失败时的解决方法

今天在使用 PHPMailer 发邮件时遇到一个问题,显示错误是 Could not connect to SMTP host,由于之前测试成功的服务器在香港,网站上线之后转到大陆服务器了,而且 smtp 的服务器也是在香港,所以以为是服务器的原因,但是在服务器上 ping smtp 服务器是有反应的,所以应该并不是不能连接 smtp 服务器的原因。 在网...

php.ini 配置可修改范围

今天在修改 PHP 配置值 upload_max_filesize 时发现使用 ini_set 并不能生效,而有时候修改 display_errors 却能成功,觉得很困惑,Google 之后才知道原来 PHP 配置有可被设定范围。 简单的说,我们平常修改的配置值 display_errors 属于 PHP_INI_ALL 模式,表明可以在任何地方设定,而...

PHP 调用雅虎汇率 API

调用地址是: http://download.finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=CNYHKD=x CNYHKD 为必填,指人民币 (CNY) 与港币 (HKD) 的汇率,可以换成其他国家的货币代码 返回数据:”CNYHKD=x”,1.1568,“7/18/2016”,“1...

使用 usort 函数对二维数组进行排序

PHP 提供了很多的排序函数,看了一下,好像没有对二维数组以上进行排序的函数,但是有一个 usort() 函数,可以使用用户自定义的函数 (也可以是匿名函数) 进行排序,这个函数可以满足需求,以下官方手册上的一个简单例子。 function cmp($a, $b) { if ($a == $b) return 0; return ($a &...

PHP 实现 301 重定向

PHP 中实现 301 重定向挺简单的,代码也不复杂,无非就是对域名进行判断,不是新域名就使用 header 函数进行跳转,但是中途也出现一些问题,在此做个记录。 $host = 'www.new.com'; // 要跳转的域名 $query = $_SERVER['REQUEST_URI']; // 查询字段 $query...

网页中添加 Facebook 第三方登录

工作项目中需要使用 facebook 第三方登录,需要调用 facebook php api,其实代码什么的都已经写好了,但是在跳转到登录页面时产生错误,google 之后发现是 facebook app 的配置没填好,把这个 api 调用过程做个记录。本次使用的 PHP SDK Version 在 2.0 以上。 本地配置文件 php 部分主要是修改 ...