>注: 工欲善其事必先利其器
# 开发环境
## xdebug
开发式时非常好用
强大的单步调试, 断点调试, 临时改变内存变量值,
具体的使用请参考我的一篇phpstorm+xdebug的文章
## 写文件缓存
```
put_file_contents()
```
```
function logg($val, $trace = '')
{
$content = date("Y-m-d H:i:s") . $trace ."\n" .
var_export($val, true).
"\n................\n\n";
file_put_contents('log.txt', $content, FILE_APPEND);
}
```
## 获取内存占用
```
memory_get_usage()
```
单位为byte
```
$start = memory_get_usage();
do_something();
$end = memory_get_usage();
$mem_do_something = $end - $start;
```
# 生产环境
生产环境因为一般不具备xdebug,
## 打印调试
print_r + die;
var_dump + die;
呃, 其实我觉得这种方式非常sb
## 写文件缓存
put_file_contents()
## 利用框架自带, 如TP
### ThinkPhp的log和write方法
```
\Think\Log::record("callback hook".var_export($data. true), \Think\Log::DEBUG)
\Think\Log::record(var_export($data. true), \Think\Log::WARN)
\Think\Log::write(var_export($data. true), \Think\Log::DEBUG)
```
### 性能调试
```
G('begin');
// ...其他代码段
G('end');
// ...也许这里还有其他代码
// 进行统计区间
echo G('begin','end').'s'; // 时间
echo G('begin','end','m').'kb'; // 内存
```
如果没有end标签, 会自动把当前位置先标记位end标签。
如果环境不支持内存统计,则该参数无效,仍然会进行区间运行时间统计
php 内存泄漏一般较少, 出现了80%都是自己的程序问题, 有时候程序不知道怎么就挂掉了, 监控下内存占用