查看crontab执行情况

1. linux 看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察

2. unix 在 /var/spool/cron/tmp文件中,有croutXXX001864的tmp文件,tail 这些文件就可以看到正在执行的任务了。

3. mail任务 在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。

Centos 编译安装 Apache 2.4.7

Centos 编译安装 Apache 2.4 准备:

yum groupinstall "Development tools"
yum install zlib-devel pcre-devel

从官方下载相关包:

wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.7.tar.gz
wget http://archive.apache.org/dist/apr/apr-1.5.0.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.5.3.tar.gz
wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.32/pcre-8.32.tar.gz

解压缩:

tar xvf httpd-2.4.7.tar.gz
tar xvf apr-1.5.0.tar.gz
tar xvf apr-util-1.5.3.tar.gz
tar zxvf pcre-8.32.tar.gz

安装

进入APR目录编译安装apr

cd apr-1.5.0
./configure --prefix=/usr/local/apr
make && make install

如果出现/bin/rm:cannot remove `libtoolT’: No such file or directory错误, 解决方法:

在编译安装apr时运行 ./configure –prefix=/usr/local/apr 可能出现上面的错误提示,这时直接打开configure文件(就在解压的软件包里面),把 $RM “$cfgfile” 那行用 # 注释掉,重新再运行 ./configure –prefix=/usr/local/apr 就可以了。

编译安装过程中libuuid.a遇到点问题,error如下:

/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../lib64/libuuid.a(gen_uuid.o): relocation R_X86_64_32 against `.rodata.str1.1′ can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../lib64/libuuid.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

问题的解决:

wget http://downloads.sourceforge.net/e2fsprogs/e2fsprogs-1.41.14.tar.gz
tar xvzf  e2fsprogs-1.41.14.tar.gz
cd e2fsprogs-1.41.14
 export CFLAGS="-fPIC"
./configure --prefix=/usr/local/e2fsprogs
make
make install
make install-libs
cp /usr/local/e2fsprogs/lib/libuuid.a /usr/lib64/

然后再一次进入apr目录configure重新安装

进入apr-util目录编译安装apr-util

cd ../
cd apr-util-1.5.3
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

进入pcre目录编译安装pcre

cd ../
cd pcre-8.32
./configure
make && make install

安装apache2.4.7

这里我的安装目录为/usr/local/apache

cd ../
cd httpd-2.4.7
./configure --prefix=/usr/local/apache --with-apr-util=/usr/local/apr-util
make && make install

配置apache:

开启以下模块(仅供参考,请根据实际需求选择开启):

必须:

LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so

设置超时:

LoadModule reqtimeout_module modules/mod_reqtimeout.so

以下三个都是为了配合 Google mod_pagespeed 才开启,不用可不开:

LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

Apache 日志:

LoadModule log_config_module modules/mod_log_config.so

指定 Apache 用户和组:

LoadModule unixd_module modules/mod_unixd.so

phpMyAdmin 要用:

LoadModule alias_module modules/mod_alias.so

wordpress, joomla 要用:

LoadModule rewrite_module modules/mod_rewrite.so

还有很多配置文件在 /usr/local/apache/conf/extra 下面,在 httpd.conf 中可以选择是否加载,我加载的部分有:
配置 timeout, keepalive 的 httpd-default.conf;
配置 apache mpm 的 httpd-mpm.conf, 这个很重要,性能优化基本上就靠这个文件了;
配置网站目录的 httpd-userdir.conf;
配置虚拟主机的 httpd-vhosts.conf;
删除服务器上以前安装的 apache:

service httpd stop
yum remove httpd

设置 Apache 2.4.7 启动项:

ln -s /usr/local/apache/bin/apachectl /etc/init.d/httpd

编辑 /etc/init.d/httpd 文件,在首行 #!/bin/sh 下面加入两行:

chkconfig: 35 85 15
description: Activates/Deactivates Apache 2.4.7

加入开机自动启动:

chkconfig --add httpd
chkconfig httpd on

最后一步,启动编译好的 Apache 2.4.7:

service httpd start

完成.

注意:

如果编译安装PHP,php加了so文件还无法运行,请查看http.conf是否有下面这一行,没有则加上:

<FilesMatch \.php$>
 SetHandler application/x-httpd-php
</FilesMatch>

参考文章:

OS X Mountain Lion 系统配置 Apache+Mysql+PHP 详细教程

如果你是一名 Web 开发者,很多时候都需要在本地搭建服务器测试环境,比如 Apache+Mysql+PHP 这样的环境。事实上 Mac OS X 中想要搭建这样的环境很简单,本文我们就会将详细的教程分享给大家。

首先需要说明的是,Mac OS X 系统其实已经集成了 Apache+PHP环境,用户手动开启即可。在之前的 OS X 系统中,只需要进入「系统偏好设置——共享」,然后开启「Web 共享」就可以打开 Apache。不过在最新的 Mountain Lion 中苹果取消了这个共享功能的图形界面,只能从命令行开启。

MOUNTAIN LION 中已经没有”WEB共享”

启用 Apache/Web 共享

打开终端,运行启动 Apache 命令:

sudo apachectl start

关闭命令:

sudo apachectl stop

重启命令:

sudo apachectl restart

查看 Apache 版本命令:

httpd -v

Mountain Lion 中集成的 Apache 版本如下:

mbp:~ eyon$ httpd -v
Server version: Apache/2.2.22 (Unix)
Server built: Jun 20 2012 13:57:09

启用 Apache 之后,你可以直接在浏览器中访问 http://localhost,如果出现”It works!”就表示运行正常。

Root 目录

启用 Apache 之后,你首先得知道网页文件应该放到哪个目录才能正常运行,相信有过 Linux 服务器配置经验的对此不会陌生。OS X 中默认有两个目录可以直接运行你的 Web 程序,一个是系统级的 Web 根目录,一个是用户级的根目录,大家记下即可。

系统级的根目录是:

/Library/WebServer/Documents/

它对应的网址是:

http://localhost

用户级的根目录是:

~/Sites

~/Sites 也就是你用户目录下面的”站点”目录,在 OS X Mountain Lion 中,这个目录可能没有,所以你需要手动建立一个同名目录。建立方式很简单,直接在终端中运行:

sudo mkdir ~/Sites

建立”站点”文件夹之后,检查下面这个文件夹下面是不是有”你的用户名.conf”这个文件。

/etc/apache2/users/

如果没有,那么你需要创建一个,取名为”你的用户名.conf”,你可以使用 vi 或者 nano 这两种编辑器之一来创建。

sudo vi /etc/apache2/users/你的用户名.conf

创建之后将下面的这几行内容写到上面的 conf 文件中:

<Directory "/Users/username/Sites/">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>

文件保存之后,给它赋予相应的权限:

sudo chmod 755 /etc/apache2/users/你的用户名.conf

接下来重启 Apache,以使该配置文件生效:

sudo apachectl restart

之后你就可以通过浏览器访问你的用户级目录网页了,你可以随便防个网页进去测试一下。根目录地址为:

http://localhost/~username/

(请将username改成你的用户名)

启用 PHP

Mountain Lion 中已经集成了 PHP 5.3.13 版本,也需要手动开启。你可以用 vi 或者 nano 编辑器打开下面这个文件:

sudo nano /etc/apache2/httpd.conf

然后搜索”php”,第一条匹配的应该是下面这句代码:

LoadModule php5_module libexec/apache2/libphp5.so

请将这句代码前面的#去掉,然后保存文件。

接下来再一次重启 Apache:

sudo apachectl restart

现在 PHP 应该已经开始工作了,你可以在用户级根目录下(~/Sites/)放一个PHP测试文件,代码如下:

<?php phpinfo(); ?>

安装 MySQL

Mountain Lion 中并没有集成 Mysql,需要手动安装。你可以点击这个链接下载 MySQL 的安装包,请下载 Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive(可以在 Mountain Lion 下正常工作)。

点击下载之后,会跳转到一个注册/登录页面,你不需要注册也不需要登录,直接点登录框下面的:No thanks, just take me to the downloads! 就可以跳过这个步骤直接开始下载了,整个 DMG 包大约是113MB。

下载完DMG之后,双击你会提取出三个文件和一个 RedMe.txt 文档。这三个文件分别是:

  • mysql5.5.xxx.pkg
  • MySQLstartupitem.pkg
  • MySQLPrefPane

你需要逐一安装这三个文件,双击之后系统可能会提示你由于该软件包来自身份不明的开发者,不能安装。遇到这种情况,你可以按住 command 键,然后右键点击安装文件,再点击右键菜单中的”打开”,这样就可以绕过这个安全限制了(当然你也可以在系统偏好设置——安全性与隐私——通用中改成可打开”任何来源”的应用程序)。

三个文件都安装完成之后,进入「系统偏好设置」,在面板的最下面你会看到一个 MySQL 的设置项,点击它之后就可以启动MySQL,或者你也可以通过下面的命令开启:

sudo /usr/local/mysql/support-files/mysql.server start

如果你想查看 MySQL 的版本,可以用下面这个命令:

/usr/local/mysql/bin/mysql -v

运行上面这个命令之后,会直接从命令行中登录到 MySQL,输入命令 \q 即可退出。

到这里 MySQL 已经配置完成,并且可以运行。但为了更加方便使用,你最好再设置一下系统环境变量,也就是让 mysql 这个命令在任何路径都可以直接启动(不需要输入一长串的准确路径)。

设置环境变量也很方便,直接用命令(这里笔者用 vi 编辑器举例):

cd ; vi .bash_profile

然后按字母 i 进入编辑模式,将下面的这句代码贴进去:

export PATH="/usr/local/mysql/bin:$PATH"

然后按 esc 退出编辑器,再输入 :wq(别忘了冒号)保存退出。当然你如果使用 nano 或者别的编辑器的话,操作方式跟这个可能不一样,反正意思就是将上面那句话写入到 .bash_profile 文件中。

接下来还要重新加载一下 Shell 以让上面的环境变量生效:

source ~/.bash_profile

之后你就可以在终端的任意目录使用 mysql 命令了,你可以运行 mysql -v 试试。

最后一步,你还应该给你的 MySQL 设置一个 root 用户密码,命令如下:

mysqladmin -u root password '这里填你要设置的密码'

(请记住密码一定要用半角单引号包起来)

上面的 mysqladmin 命令,我没有写完整路径。因为上面我们已经设置了环境变量,如果你没有设置环境变量的话,就需要用/usr/local/mysql/bin/mysqladmin ******** 来运行。

安装 phpMyAdmin

在安装 phpMyAdmin 之前,请首先修复 2002 socket 错误:

sudo mkdir /var/mysql

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

然后去 phpMyAdmin 网站下载安装包,推荐下载 english.tar.gz。解压之后,将解压出来的文件夹改名为”phpmyadmin”,并放到上面建立的”站点”目录下(~/Sites)。然后在 phpmyadmin 下建立一个 config 文件夹:

mkdir ~/Sites/phpmyadmin/config

修改权限:

chmod o+w ~/Sites/phpmyadmin/config

之后就可以从浏览器中访问phpmyadmin的初始设置页面了:

http://localhost/~username/phpmyadmin/setup/

(请将 username 修改成你的用户名)

打开页面之后,基本上不需要配置。进去之后点击”New server”,在 Basic settings 页面确保 Serverhostname 是 localhost,在 Authentication 配置好登陆用户名和密码(之前设置的 root 密码),点击保存就可以了。

phpMyAdmin配置完成之后,上面建立的 /config 目录中会出现一个 config.inc.php 文件,将这个文件移到 phpmyadmin 根目录(上一级),然后删除这个空的 /config 目录。

到这里就算完成了,接下来你就可以访问 http://localhost/~username/phpmyadmin/ (将username替换成你的用户名)来通过 phpmysql 管理你的数据库了。

以上便是在 OS X Mountain Lion 上配置 Apache+Mysql+Php 的完整教程。如果大家有任何不明白的地方,请在下面评论框中提问。

via Coolest guy on the planet

转自:http://www.guomii.com/posts/30136

PHP使用DomDocument抓取HTML内容

有时候会有需要从一个HTML页面来分离出你需要的一些数据来进行处理。

当然自己分析文件肯定可以,但是比较快速且方便的是使用正则表达式或者DOM。

鉴于正则表达式我不熟悉,所以我打算使用DOM来完成。

 

先谈谈我的需求,我要从一个HTML页面的一个表格中提取数据并且将这个数据整理出来加入到MySQL数据库中。

假设目标HTML中我感兴趣的Table有3列,分别是ID,Name,内容。

index.php;

<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 $urlTarget = "http://www.xxxx.com/targethtmlpage.html";
require_once('ContentManager.php');
//建立Dom对象,分析HTML文件;
 $htmDoc = new DOMDocument;
 $htmDoc->loadHTMLFile($urlTarget );
 $htmDoc->normalizeDocument();
//获得到此文档中每一个Table对象;
 $tables_list = $htmDoc->getElementsByTagName('table');
//测试Table Count;
 $tables_count = $tables_list->length;
 foreach ($tables_list as $table)
 {
 //得到Table对象的class属性
 $tableProp = $table->getAttribute('class');
 if ($tableProp == 'target_table_class')
 {
 $contentMgr = new ContentManager();
 $contentMgr->ParseFromDOMElement($table);
//这里myParser就完成了分析动作。然后就可以进行需要的操作了。
 //比如写入MySQL。
 $contentMgr->SerializeToDB();
 }
 }
 ?>

 
ContentManager.php

<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 * Description of ContentParser
 *
 * @author xxxxx
 */
 require_once('ContentInfo.php');
 class ContentManager {
 //put your code here
 var $ContentList;
 public function __construct() {
 $this->ContentList = new ArrayObject();
 }
public function ParseFromDOMElement(DOMElement $table)
 {
 $rows_list = $fundsTable->getElementsByTagName('tr');
 $rows_length = $rows_list->length;
 $index = 0;
foreach ($rows_list as $row)
 {
 $contentInfo = new ContentInfo();
 $contentInfo->ParseFromDOMElement($row);
 $this->ContentList->append ($contentInfo);
 }
//test how many contents parsed.
 $count = $this->fundsInfoArray->count();
 echo $count;
 }
public function SerializeToDB()
 {
 //写入数据库,代码略。
 }
 }
?>

contentinfo.php

<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of ContentInfo
 *
 * @author xxxxx
 */
class ContentInfo {
    //put your code here
    var $ID;
    var $Name;
    var $Content;
    public function ParseFromDOMElement(DOMElement $row)
    {
        $cells_list = $row->getElementsByTagName('td');
        $cells_length = $row->length;

        $curCellIdx = 0;
        foreach ($cells_list as $cell)
        {
            switch ($curCellIdx++)
            {
                case 0:
                    $this->ID = $cell->nodeValue;
                    break;
                case 1:
                    $this->Name = $cell->nodeValue;
                    break;
                case 2:
                    $this->Content = $cell->nodeValue;
                    break;
            }
        }
    }
}

?>

一点小心得,DOM中每个Element都可以getAttribute取出属性,这些属性可以区分你分析的DOMObject。

举例来说,比如上述我分析的Target HTML有很多表格,但是我发现目标表格的class属性和其他表格是不一样的。

所以,这个属性就可以来区分我要分析的是哪个表格。

 

当然更多DOM的东西,大家可以去参考PHP Manual或者是,用IDE(NetBeans7.0就可以)转到类声明,看类接口。

有方法使用说明以及参数说明。可以参考参考。

转载自:http://blog.csdn.net/xyzhaopeng/article/details/6626340

简单的聊几句

一年前写过一篇关于工作的关于最近工作方面的感想,因为目前处于失业状态,同样感觉想说些什么。或者很庸俗,就当是自己写给自己看的吧。

今天在微博上发了一条求职微博,朋友们也帮忙着转发,非常的感谢朋友们。效果很好,认识了不少人,也有不少公司给了面试机会,可是目前唯一比较不放心的,就是我会不会是他们“想要的那个人”。

因为之前有去百度面试,我面的一塌糊涂。聊完给我的感觉是怎么我啥都不会了?估计面试官的感觉是:太浅。的确,我非软件专业出生,大学专业是网络,偏硬件,也学过一些基础C(我都不好意思跟人家说我还参加过大学生C语言大赛拿过奖,因为目前为止已经忘记差不多了),PHP是我自己大学自学的,后来感觉自学的不太规范,不细化,于是北京LAMP兄弟连又学了半年。12年7月才拿到大学毕业证,况且只是一个大专。工作时间到目前为止也才8个月,所以在底层的了解不是太多,目前也是极力在弥补这方面的缺失,的确没有啥优势。

虽然我期望薪资写的是8k+,这只是期望而已,合适的话,6、7k也能接受。也许对于我目前的条件来说,可能大部分人都认为高了。但是,我觉得我值。我也说不出太多让你们相信这句话的理由。我可以换一种表达方式:如果你能让我喜欢我的工作,能提供一个让我自豪的工作,我就会做到超过这个价格的结果(完全可以当我扯淡了,大冬天的)。

这两天微博上转发量大的一个《非你莫属》一个女生应聘产品经理的视频很火爆,里面有这么一个镜头,一个老板问她:“是什么让你这么有底气,今天站在这个台上?”,她说:“可能 是我那些各种证书吧”。 我没有多少证书,就连一个毕业证还是个大专,更没有什么6级,8级CET了,我连4级都没过(每次都差20分左右,为了提升大家的成功率,两次后我没考了)。我也没有太多的工作经验。可能唯一能让我觉得资本的资本,可能就是我从大学自学编程、接项目,到现在工作半年过程中积累下来的解决问题的能力吧。

多少公司口口声声嚷着:一个优秀的程序员是拥有解决问题的能力。然而,一连几轮的面试,全是几个老练的老一代,用着他现在认为NB的技术积累,去各种打击像我这样的小年轻,几个小时下来,你累,我也累,最终好几天可能换来的是杳无音讯,这证明不了什么,也不能否定谁。有人说是缘分,我想说是运气。还想说的是:我没来跟您抢,不用用你的级别能力来为难我(有人肯定想说:为难你不是说让你一定要答出来。可是这样很有意义么?你想说:他是想考察你的思维能力。我不否定,可这不是好的方式),我想说:我没要您那么高的工资,所以不要尝试花几千块请来一个孙悟空。

我算是个感性的人,也许我上面的说法太过激,有太多的片面。但我喜欢说实话,我是个藏不住话的人,就喜欢想说就说。

我说过:每个程序员都想有一个能让他写代码而自豪的工作环境。同求,晚安

附:我的简历: http://vdisk.weibo.com/s/mR_vR

关于昨天的百度面试

斗胆让朋友介绍拥有了一次百度面试的机会,面试的是LBS搜索部研发工程师,说来惭愧,整个面试过程让我觉得自己真的差很多。讲讲面试过程吧:

首先是自我介绍,我就大概讲了一下大学的这么一个学习过程,可说完我就感觉没说好,于是更加紧张了。。。

然后问了我两个php基础,1.打印前一天时间,格式为:2012-12-28 13:26,2.去掉字符串里的“_”,这两个问题倒不是问题,第一个我的回答是:

date('Y-m-d H:i',strtotime(' -1 day '));

,第二个问题我那会回答的是:

$str = str_replace('_','',$str);

其实我知道这个并不是高效的,还有一个更快速的方案:

$str = strtr($str,'_','');//这个我测试了一个1600行的文本, 替换一个字母,速度将近相差10倍!当然这个函数只能用于等长字符串替换

好吧,接着问了两个算法题:

1.一个2N个元素的数组,包含N个奇数,N个偶数,用最快的方法使奇数放到奇数位,偶数放到偶数位。我表示我没答出来。。。悲惨啊。。。

2.一个无序数组,用最优的算法找出最大的两个数。我考虑了一会儿,问他可不可以用排序,他说效率不高,后来我脑袋终于开窍了,用冒泡法,只跑两次就OK,时间复杂度为2n,可是他告诉我,还可以更快,。。。我又想了一会儿,“用两个变量!”,“对”。。。妈呀,终于对了。。。那会其实特别紧张的。为什么是两个变量呢,平常我们冒泡不是用一个I嘛,最外层,如果用两个变量去比较的话,就能得到最大和次大了。。。

然后下面就没考我题了,问了一些我没接触过的。

首先让我说一下对mysql索引的理解,我表示我不知道从哪方面去回答,然后大概说了索引的几种类型。看来他又失望了,接着问了我apache和php之前是怎么一个交互过程,额,这我真不太清楚。

好吧,再次让他失望,“你平常都怎么优化Mysql的”,我说了几个,先是自己写语句的时候尽量在SQL上优化,建表的时候索引优化,分区等等。然后从逻辑上对表进行竖向拆分。太紧张,自己答到哪去了都不知道。

然后他问了一些SEO的东西,我没有专门去研究过SEO,只是自己在写项目时的一些注意点说了一下,当然这并不是SEO的关键。。。

好吧,他问我有没有要问的,我说你给我讲讲数据结构的一个学习路线吧,我大学专业没有这门课,所以得自己研究研究,他就大概说了一通(其实我真没听懂…术语到是听过)。

好吧,面试结束,说他会把情况给HR,一周内会有消息。(当我听到没有第二面的时候我就已经看不到希望了。。。),他送我到电梯的时候,我问他“是不是让您很失望?”,“还行吧,下次好好看看底层的,专业的东西,给面试官眼前一亮的感觉就好了。。。”。

半个多小时吧,就彻底把我打败了。

总结:面试过程太紧张,原因是你越想进一家公司,你就会过度谨慎,但这造成的结果恰恰相反,一塌糊涂。底层知识储备不够,甚至是完全不够,得好好补补。mysql的优化得好好整整。总之,知识不够。

这场面试给我定了一个目标:下次去百度面试的时候,让面试官“眼前一亮!”。加油!!!!

1月7号结果出来了,拒绝了。不过没关系。下次,等着我!

xdebug webgrind 浅解

原文:http://blog.163.com/yanghe1000@126/blog/static/1181854472012730114159214/

webgrind是一个php 执行时间分析工具,类似于Wincachegrind这个工具,用来分析相关函数的执行时间和相关的性能的,只不过这个是web版的

这个是你安装好wamp之后,自动就安装好的,只不过需要加一些配置

打开php.ini文件(这里可得注意了,apache目录下也有php.ini,php目录下也有php.ini,别改错了,无法确定请使用phpinfo()函数查询最终加载的哪个),

xdebug.remote_enable = off 
xdebug.profiler_enable = off 
xdebug.profiler_enable_trigger = off 
xdebug.profiler_output_name = cachegrind.out.%t.%p 
xdebug.profiler_output_dir = "e:/wamp/tmp" 
xdebug.profiler_enable_trigger = on

配置说明:

zend_extension_ts="d:/wamp/bin/php/php5.2.5/ext/xdebug.dll"

加载xdebug模块。这里不能用extension=php_xdebug.dll的方式加载,必须要以zend的方式加载。安装文档上说的。

xdebug.auto_trace=on;

自动打开“监测函数调用过程”的功能模块。该功能可以在你指定的目录中将函数调用的监测信息以文件的形式输出。此配置项的默认值为off。

xdebug.collect_params=on;

打开收集“函数参数”的功能。将函数调用的参数值列入函数过程调用的监测信息中。此配置项的默认值为off。

xdebug.collect_return=on

打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。此配置项的默认值为off。

xdebug.trace_output_dir="d:/wamp/bin/php/debuginfo"

设定函数调用监测信息的输出文件的路径。

xdebug.profiler_enable=on

通过在URL里传递一个名为XDEBUG_PROFILE的GET变量来触发xdebug的profiler,形如:

http://网址/index.php?XDEBUG_PROFILE

然后打开http://localhost/webgrind/ 点update 就如下图了

xdebug  webgrind 浅解 - 海阔天空 - 海阔天空

JS判断浏览器是否为IE6的几种方法

史上最简单的方法(11.5日发现这个不靠谱,IE8也会中枪!):

if(!+[1,]) alert('您的浏览器版本过低!请升级您的浏览器以获得最佳浏览效果!');

附上其它几个方法:
方法1:

var isIE6= /msie 6/i.test(navigator.userAgent);

方法2:

var isIE6= navigator.appVersion.indexOf("MSIE 6")>-1;

方法一和二是通过navigator对象获取浏览器信息字符串,获取相关信息确认是否是IE6
方法3:

var isIE6= !!window.ActiveXObject&&!window.XMLHttpRequest;

方法三是通过检查浏览器能力来判断是否是IE6

以上是我的更新插件 Let’s Kill IE6 时学到的,分享分享。

分享一个数字转换为汉字的函数

可以实现数字转换为金额汉字或者普通的汉字表示:

/**
 * 数字转换为中文
 * @param  string|integer|float  $num  目标数字
 * @param  integer $mode 模式[true:金额(默认),false:普通数字表示]
 * @param  boolean $sim 使用小写(默认)
 * @return string
 */
function number2chinese($num,$mode = true,$sim = true){
	if(!is_numeric($num)) return '含有非数字非小数点字符!';
	$char    = $sim ? array('零','一','二','三','四','五','六','七','八','九')
				: array('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
	$unit    = $sim ? array('','十','百','千','','万','亿','兆')             
				: array('','拾','佰','仟','','萬','億','兆');
	$retval  = $mode ? '元':'点';

	//小数部分
	if(strpos($num, '.')){
		list($num,$dec) = explode('.', $num);
		$dec = strval(round($dec,2));
		if($mode){
			$retval .= "{$char[$dec['0']]}角{$char[$dec['1']]}分";
		}else{
			for($i = 0,$c = strlen($dec);$i < $c;$i++) {
				$retval .= $char[$dec[$i]];
			}
		}
	}
	//整数部分
	$str = $mode ? strrev(intval($num)) : strrev($num);
	for($i = 0,$c = strlen($str);$i < $c;$i++) {
		$out[$i] = $char[$str[$i]];
		if($mode){
			$out[$i] .= $str[$i] != '0'? $unit[$i%4] : '';
			if($i>1 and $str[$i]+$str[$i-1] == 0){
				$out[$i] = '';
			}
			if($i%4 == 0){
				$out[$i] .= $unit[4+floor($i/4)];
			}
		}
	}
	$retval = join('',array_reverse($out)) . $retval;
	return $retval;
}
$num = '0123648867.789';
echo $num,'<br />';
//普通数字的汉字表示
echo '普通:',number2chinese($num,false),'<br />';
//金额汉字表示
echo '金额(简体):',number2chinese($num,true),'<br />';
echo '金额(繁体):',number2chinese($num,true,false);

Mysql按给定ID顺序排序查询结果

虽然我们很少情况下这样查询,但有时候却会遇到这样的需要:

SELECT * FROM `mytable` WHERE `id` IN(10,3,2)

这样出来的结果一般默认就是ASC显示如下图:


可是,怎么才能按照10,3,2这样的顺序出来呢?

下面就是方法啦!

SELECT * FROM `mytable` WHERE `id` IN(10,3,2) ORDER BY FIND_IN_SET(`id`, '10,3,2')