SimpleHttpRequester的安装和使用
作者:admin 日期:2019-09-10
php7 unset数组元素会不会释放内存
作者:admin 日期:2018-08-31
针对这个问题, 我们先上一段代码.
<?php $memory2 = $memory3 = $memory4 = 0; $data = []; $memory = memory_get_usage(); foreach (range(1, 100000) as $key) { $data[$key] = str_repeat("1', 100); } $memory2 = memory_get_usage() - $memory; foreach (range(1, 100000) as $key) { unset($data[$key]); } $memory3 = memory_get_usage() - $memory; echo "memory2: " . $memory2, PHP_EOL; echo "memory3: " . $memory3, PHP_EOL;
这段代码分别会输出3个内存使用情况. 分别记为memory2, memory3.
memory2: 给数组设置10000个key, 给value字段设置100个1的字符串. 之后的内存.
memory3: unset掉数据中所有的key之后的内存值.
array_unshift的性能问题
作者:admin 日期:2018-08-30
不加全文索引解决模糊查询的问题
作者:admin 日期:2018-08-29
PHP错误显示问题, 错误日志去哪儿了
作者:admin 日期:2017-08-10
相信很多做PHP开发的同学都会遇到一些PHP报错的情况. 有时候这些报错显示在页面上,有时候显示在日志文件里. 有时候可能会为一个500错误找半天, 却还是没有找到报在在哪里.
下面就根据地我一点点粗浅的认识总结一下这个问题.
开启error_reporting
要想看到错误, 第一件是就是开启error_reporting, 否则所有的错误都不会被报告. 开启的代码为:
error_reporting(E_ALL);
开启了错误报告之后, 我们可能在下面三个地方看到这个错误信息.
- 网页页面上.
- nginx日志中.
- php错误日志中.
display_errors
让git忽略已跟踪文件的修改
作者:admin 日期:2016-10-05
项目中的配置文件在版本管理中有时候会让我们很头疼. 服务器的环境可能不一样, 开发人员的开发环境也可能不一样. 对于这样的配置文件, 一种办法是干脆不加入版本控制. 但这样一来, 配置文件的改动需要用其它方法通知所有相关的开发人员. 而加入版本控制又会带来新的问题. 开发人员需要改配置, 提交的时候要小心翼翼的, 生怕把这个配置文件提交上去.
对于用git做版本控制的项目来说, 有一种两全的办法.
你可以把一个配置文件加入到版本控制中, 同时你可以在开发者本地忽略这个文件的修改. 命令如下:
$ git update-index --assume-unchanged /path/to/file #忽略跟踪 $ git update-index --no-assume-unchanged /path/to/file #恢复跟踪
当你断言一个文件是unchanged状态的时候, git不再去检查它的状态. 但是当远程分支对这个文件有更新的时候, 将会提示用户这个文件需要合并.
PHP BOM头导致COOKIE无法输出
作者:admin 日期:2016-07-27
带BOM头的UTF8文件, 其文件头部占三个字节(0xEF 0xBB 0xBF). 现在有很多的编辑器都可以识别BOM头了, 但还是有一些不能. 比如说PHP就无法识别这个标记. 所以PHP执行的时候会把它当作非PHP脚本直接输出.
而由于http协议限制setcookie是必需在所有的内容发送调用, 只要有任何的空白内容在setcookie执行之前执行了setcookie将会报一个warning, 且不会输出任何COOKIE
这么明显的问题在开发的时候一定会被发现, 但是, 但是, 但是(关键点)很多人调用setcookie时加了一个@符号号来关闭一个函数调用的输出.
curl设置代理
作者:admin 日期:2016-07-17
微信支付接口开发 视频教程
作者:admin 日期:2016-05-15
PHP图片处理库 Intervention Image
作者:admin 日期:2015-12-14
操作图片比较方便。要求PHP5.4以上,有fileinfo扩展。图片处理驱动可以是GD也可以是imagick, 也就是说这两个扩展也必需安装其一。
// include composer autoload require "vendor/autoload.php'; // import the Intervention Image Manager Class use Intervention\Image\ImageManager; // create an image manager instance with favored driver $manager = new ImageManager(array('driver' => 'imagick')); // to finally create image instances $image = $manager->make('public/foo.jpg')->resize(300, 200);
php输出字符串方法集
作者:admin 日期:2015-10-01
yii2查询条件where的基础写法
作者:admin 日期:2015-09-24
yii2提供了很强大的sql构造工具类。基于sql查询主要与的是查询条件,所以我简单的翻译了一下yii2中where子句的写法。
如果是数组,有两种格式:
- hash表格式:
['列1' => '值1', '列2' => '值2', ...]
- 操作码模式:
[操作码, 操作数1, 操作数2]
hash表格式
通常会产生column1=value1 AND column2=value2 AND ...
。如果值是一个数组,会产生一个in
表达式。如果值是null
, 会产生一个is null
。
操作码格式
将根据操作码产生SQL表达式。表达式可以是如下:
- and 所有的操作数表达式全部用
and
连接 - or 同上,所有操作数用
or
连接 - not 只接受一个操作数
- between
['between', 'id', 1, 10]
将会产生id BETWEEN 1 AND 10
- not between 同上
- in 第一个操作数是列名,第二个是一个数组或是一个数据库表达式。
- not in 同上
- like 第一个操作数是一个列名或一个数据库表达式,第二个操作数是like的表达式。如
['like', 'name', 'tester']
will generatename LIKE '%tester%'
。 - or like
- or not like
- exists 第一个操作数是一个子查询。
- 其它操作码,比如
['>=', 'id', 10]
将会产生,id>=10
preg_match_all的两种用法
作者:admin 日期:2015-09-18
preg_match_all的作用是把一个字符串中所有与正则表达式匹配的文本提取出来。一般人只知道它的一种用法,其实它还有另外一种用法。首先看它的原型。
int preg_match_all ( string pattern, string subject, array matches [, int flags] )
pattern是正则,subject是待匹配的字符串,matches是匹配的结果。最后一个flag是一个标记。
第一种用法。
<?php $html = "http://www.zeroplace.cn/default.asp?cateID=28\nhttp://www.zeroplace.cn/default.asp?cateID=27"; $pattern = "/http:\/\/www\.zeroplace\.cn\/default\.asp\?cateID=(\d+)/"; preg_match_all($pattern, $html, $matches); print_r($matches);
它的输出是:
Array ( [0] => Array ( [0] => http://www.zeroplace.cn/default.asp?cateID=28 [1] => http://www.zeroplace.cn/default.asp?cateID=27 ) [1] => Array ( [0] => 28 [1] => 27 ) )
yii2 去掉 index.php
作者:admin 日期:2015-09-17
yii2中配置urlManager的enablePrettyUrl为true后,实际上是使用了php中pathinfo的方式来获取路由,所以在路径中会有一个index.php。有一些同学需要更加美化url的会想直接把index.php也去掉。
这在yii2中很好实现,就是配置urlManager的showScriptName属性,这个属性只在enablePrettyUrl为true时才生效。
$config = [ "id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ], ] ]
composer环境变量家目录
作者:admin 日期:2015-09-15
PHP5.4的内置HTTP服务器
作者:admin 日期:2015-09-13
PHP使用GuzzleHttp发送HTTP请求
作者:admin 日期:2015-09-12
之前的文章有讲到php调用curl发送http请求,但curl这种过程式的调用有时候是有点不方便的,各种参数的设置太麻烦。以至于我一写到curl就要去找找以前写的代码来拷贝。
如果使用composer的话,有一个包是挺好用的,就是GuzzleHttp。这个包的接口很简单,使用起来略微轻松。
下面是测试的代码:
<?php require __DIR__."/vendor/autoload.php"; use GuzzleHttp\Client; $client = new Client([ "base_uri' => 'http://www.zeroplace.cn/', 'timeout' => 2.0, ]); $res = $client->request("GET", "/"); echo $res->getStatusCode(), "\n"; foreach ($res->getHeaders() as $name => $values) { echo $name . ': ' . implode(', ', $values) . "\r\n"; } $body = $res->getBody(); echo $body;
这个是测试代码的地址:https://github.com/gaohuia2015/test_guzzle
git部分常用命令图示
作者:admin 日期:2015-09-01
粗用laravel5代码的感觉
作者:admin 日期:2015-08-21
最近在网上看到大家对laravel的讨论比较多,所以我就下了一个laravel5.1(下面就简称为laravel5啦)的源码回来看了一下(大家用的比较多的应该不是5吧)。大致上看了一下结构什么的,没怎么往细了看。最后看了一下laravel5的官方文档,尝试性的写了一些代码。
结构
laravel5里面比较核心的应该有两个大的模块,一个是Application,一个是Kernel。
其实Application就是一个容器,加上一些对应用的配置,回调什么的。主要功能就是一个容器。他的这个思路有点类似于Java里面的Spring的容器。
百度链接提交主动推送ASP/PHP代码
作者:admin 日期:2015-08-18
链接推送是最为快速的提交提交链接的方式,百度建议您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
这里给出两段代码,分别用asp和php将您网站上新产生的链接推送给百度。
asp代码
sub noticeBaidu(article_url) dim http, url, body, responseText body = article_url url = "http://data.zz.baidu.com/urls?site=这里修改为你自己的网址&token=这里修改为你自己的推送KEY" set http=server.createobject("MSXML2.XMLHTTP") http.open "POST", url, false http.setRequestHeader "User-Agent", "request" http.setRequestHeader "Content-Type", "text/plain" http.send(body) " response.write(http.readystate) responseText = http.responseText response.write("notice response: " & responseText) set http = nothing end sub
php代码
<?php $urls = array( "http://www.zeroplace.cn/article.asp?id=960', 'http://www.zeroplace.cn/article.asp?id=961', ); $api = 'http://data.zz.baidu.com/urls site=这里修改为你自己的网站&token=这里修改为你自己的推送KEY'; $ch = curl_init(); $options = array( CURLOPT_URL => $api, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => implode("\n", $urls), CURLOPT_HTTPHEADER => array('Content-Type: text/plain'), ); curl_setopt_array($ch, $options); $result = curl_exec($ch); echo $result;