标签:des style color 文件 io re c cti
登录到服务器查看的时候,发现工作目录中有很多日志文件和core文件
pwd : /home/work/anti
-rw-rw-r-- 1 work work 2738 Jul 18 21:22 14_07_18.log
-rw-rw-r-- 1 work work 1829 Jul 19 02:35 14_07_19.log
-rw-rw-r-- 1 work work 1590 Jul 21 06:40 14_07_21.log
-rw-rw-r-- 1 work work 1884 Jul 22 17:03 14_07_22.log
-rw-rw-r-- 1 work work 1745 Jul 23 12:11 14_07_23.log
-rw------- 1 work work 127094784 Jul 8 17:42 core.15330
-rw------- 1 work work 353038336 Jul 8 17:33 core.22368
项目的日志文件并没有指定到这个位置呀,开始怀疑是配置错了,于是找php.ini,thinkphp框架的配置文件,php-fpm.conf等相关的配置文件
还是没有发现哪个地方配置了日志要写到这个目录
于是追原因,我发现thinkphp框架写日志的时候,最终会落到一个函数
Protected/ThinkPHP/Library/Think/Log/Driver/File.class.php
public function write($log,$destination=‘‘) {...
var_dump($destination);
其中$destination是日志的位置,于是用上面红色的代码打印变量如下:
有两种情况:
情况1,日志正确的位置 :/home/work/huangxuan/anti/Protected/Application/Runtime/Logs/14_07_25.log
情况2,日志错误的位置 :14_07_25.log
我们发现日志之所以出现在了错误的位置,是因为参数只有一个日志名,没有路径。但为什么这样呢?
原来把14_07_25.log参数传递给PHP时,PHP调用操作系统写日志的时候,把14_07_25.log传递给了操作系统,操作系统发现14_07_25.log是个相对路径,就会以当前程序运行的目录为参照物,形成绝对路径,于是日志就写在我的工作目录中了。
我们知道一个程序运行的时候,会有一个运行目录,默认我们程序在哪里启动,哪里就是它的工作目录,因为我们的php-fpm进程是在我的工作目录中启动,所以我的工作目录就变成了它的工作目录。
这同时也解释了为什么core文件也同时产生在我的工作目录。
为了验证我的想法,我把php-fpm进程kill掉,在别的目录重新启动php-fpm进程,日志果然产生在了别的目录中;同时我们kill -SIGSEGV 8888(php-fpm的pid),来模拟程序段错误(段错误的时候会生成core文件),果然一个core文件也产生了。
至于为什么thinkphp有时候会传递一个相对路径,有时候会传递一个绝对路径呢?我实在是不想找原因了。。。
标签:des style color 文件 io re c cti
原文地址:http://www.cnblogs.com/hxdoit/p/3866880.html