php性能分析工具XHProf安装配置使用教程

 更新时间:2016年11月25日 15:27  点击:1373
XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销,XHProf数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序, 下面我们来看看XHProf安装配置使用教程

XHProf是facebook 开发的一个测试php性能的扩展。

安装Xhprof扩展

$ wget http://pecl.php.net/get/xhprof-0.9.4.tgz
$ tar -zxvf xhprof-0.9.4.tgz
$ cd xhprof-0.9.4
$ cd extension/
$ phpize
$ ./configure
$ make
$ sudo make install

修改php.ini

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp

配置中xhprof.output_dir指定了生成的profile文件存储的位置,我们将其指定为/tmp。
对PHP进行性能分析
在XHProf扩展中,一共提供了四个函数用于对PHP进行性能分析。
xhprof_enable/xhprof_sample_enable函数用于开始XHProf性能分析,区别在于前者功能更加强大,而后者则是是以简单模式启动性能分析(简单记录了函数的调用栈信息),开销比较小。
xhprof_disable/xhprof_sample_disable函数用于停止性能分析,并返回分析的数据。
需要特别说明的函数是xhprof_enable,其他函数都是不需要提供参数的,而该函数则可以接受两个可选的参数,用于改变该工具的行为。
void xhprof_enable ([ int $flags = 0 [, array $options ]] )

flags 该参数用于为剖析结果添加额外的信息,该参数的值使用以下宏,如果需要提供多个值,使用|进行分隔。
XHPROF_FLAGS_NO_BUILTINS 跳过所有的内置函数
XHPROF_FLAGS_CPU 添加对CPU使用的分析
XHPROF_FLAGS_MEMORY 添加对内存使用的分析
options 数组形式提供可选参数,在此处提供ignored_functions选项需要忽略的函数
比如下面的例子,同时对内存和CPU进行分析,并且忽略对call_user_func和call_user_func_array函数的分析。
xhprof_enable(
    XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU,
    [
        'ignored_functions'    => [
            'call_user_func',
            'call_user_func_array'
        ]
    ]
);

// 这里是PHP代码,比如业务逻辑实现等要被分析的代码部分
....

$xhprofData = xhprof_disable();// $xhprofData是数组形式的分析结果
print_r($xhprofData);

注意,如果使用XHPROF_FLAGS_CPU选项对CPU占用也进行分析,在Linux环境下,会造成比较高的系统负载,因此不建议使用,而推荐只使用XHPROF_FLAGS_MEMORY,对内存的分析不会对系统造成太多负载。
形象化的查看分析结果
使用xhprof_disable完成性能分析并且获取到分析结果之后,我们通常不会直接输出结果,因为这样的结果是以数组形式组织的,看起来并不直观,幸运的是,xhprof提供了基于web的图形界面对分析结果进行查看。
在使用之前,请先确保服务器安装了graphviz工具,否则在生成监控图表的时候回出现以下错误:
failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

这里提示找不到dot命令,所以需要先安装graphviz

$ sudo yum install graphviz

由于分析结果的查看工具是基于web的,因此,我们需要将xhprof安装包中的xhprof_html和xhprof_lib目录放到服务器的web目录下,让xhprof_html目录中的内容对外可以访问。
比如我的测试服务器环境是使用vagrant搭建的Cent OS,我见过这两个目录放到/vagrant/xhprof目录下:

[vagrant@localhost xhprof]$ pwd
/vagrant/xhprof
[vagrant@localhost xhprof]$ ls
xhprof_html  xhprof_lib

web服务器使用的是Nginx,因此,在Nginx的配置文件nginx.conf中的配置如下:
server {
    listen       80;
    server_name  _;
    root /vagrant;
    ...

web服务器的根目录是/vagrant,因此访问地址为http://localhost/xhprof/xhprof_html/index.php.
当然,配置好环境之后,我们还是获取不到分析结果的,因为我们在代码中并没有将分析结果保存到xhprof.output_dir指定的目录中。
因此,我们需要修改我们的代码,是其能够将分析结果存放到xhprof.output_dir指定的目录中。
....
$xhprofData = xhprof_disable();
require '/vagrant/xhprof/xhprof_lib/utils/xhprof_lib.php';
require '/vagrant/xhprof/xhprof_lib/utils/xhprof_runs.php';

$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprofData, 'xhprof_test');

echo 'http://localhost/xhprof/xhprof_html/index.php?run=' . $runId . '&source=xhprof_test';

 

变量$runId是本次请求生成分析结果的id,最后我们输出了一个链接地址,使用改地址就可以看到本次请求的分析结果。
分析结果
注意到中间的View Full Callgraph链接,通过该链接我们可以看到图形化的分析结果。
图形化分析结果
图中红色的部分为性能比较低,耗时比较长的部分,我们可以根据根据哪些函数被标记为红色对系统的代码进行优化
Brew 是 Mac 下面的包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便。本文我们来看看用brew安装不同版本的php。

MAC OS X 10.9.5系统里已经自带了 apache  和 php ,只是默认没有启用,我们将他们启用即可。
APACHE的默认版本是 Apache/2.2.26 (Unix),php版本是PHP 5.4.30。

由于调试程序需要,我需要同时安装低版本的php5.3,但是又不希望删除系统预装的php 5.4,或升级/降级系统的php5.4,那么怎么办呢?这个时候,就可以通过brew的方式安装新的php版本。

第一步,先安装 brew


Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具。 Mac 自带ruby 所以安装起来很方便,同时它也会自动把git也给你装上。官方网站: http://brew.sh

在mac下终端里直接输入命令行:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装完成之后,建议执行一下自检:brew doctor 如果看到Your system is ready to brew. 那么你的brew已经可以开始使用了。

常用命令: (所有软件以PHP5.5为例子)

brew update                        #更新brew可安装包,建议每次执行一下
brew search php55                  #搜索php5.5
brew tap josegonzalez/php          #安装扩展<gihhub_user/repo>  
brew tap                           #查看安装的扩展列表
brew install php55                 #安装php5.5
brew remove  php55                 #卸载php5.5
brew upgrade php55                 #升级php5.5
brew options php55                 #查看php5.5安装选项
brew info    php55                 #查看php5.5相关信息
brew home    php55                 #访问php5.5官方网站
brew services list                 #查看系统通过 brew 安装的服务
brew services cleanup              #清除已卸载无用的启动配置文件
brew services restart php55        #重启php-fpm

第二步,安装PHP

   
先添加brew的PHP扩展库:

brew update
brew tap homebrew/dupes
brew tap homebrew/php
brew tap josegonzalez/homebrew-php

可以使用 brew options php53 命令来查看安装php5.3的选项,这里我用下面的选项安装:

brew install php53 --with-apache --with-gmp --with-imap --with-tidy --with-debug

请注意:如果你希望以mac下的apache作为web server,编译时要加 --with-apache;如果你的web server 是 nginx这类,就需要加上 --with-fpm。

Options
--disable-opcache
Build without Opcache extension
--disable-zend-multibyte
Disable auto-detection of Unicode encoded scripts
--homebrew-apxs
Build against apxs in Homebrew prefix
--with-apache
Enable building of shared Apache 2.0 Handler module, overriding any options which disable apache
--with-cgi
Enable building of the CGI executable (implies --without-apache)
--with-debug
Compile with debugging symbols
--with-fpm
Enable building of the fpm SAPI executable (implies --without-apache)
--with-gmp
Build with gmp support
--with-homebrew-curl
Include Curl support via Homebrew
--with-homebrew-libxslt
Include LibXSLT support via Homebrew
--with-homebrew-openssl
Include OpenSSL support via Homebrew
--with-imap
Include IMAP extension
--with-libmysql
Include (old-style) libmysql support instead of mysqlnd
--with-mssql
Include MSSQL-DB support
--with-pdo-oci
Include Oracle databases (requries ORACLE_HOME be set)
--with-phpdbg
Enable building of the phpdbg SAPI executable (PHP 5.4 and above)
--with-postgresql
Build with postgresql support
--with-thread-safety
Build with thread safety
--with-tidy
Include Tidy support
--without-bz2
Build without bz2 support
--without-mysql
Remove MySQL/MariaDB support
--without-pcntl
Build without Process Control support
--without-pear
Build without PEAR
--without-snmp
Build without SNmp support
--HEAD
Install HEAD version

HP编译过程中如果遇到 configure: error: Cannot find OpenSSL's <evp.h> 错误,执行 xcode-select --install 重新安装一下 Xcode Command Line Tools 即可解决该错误(来源:https://github.com/Homebrew/homebrew-php/issues/1181)。

安装完php后,会有一段提示,请仔细阅读:

Caveats
To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php5_module    /usr/local/opt/php53/libexec/apache2/libphp5.so

The php.ini file can be found in:
    /usr/local/etc/php/5.3/php.ini

✩✩✩✩ PEAR ✩✩✩✩

If PEAR complains about permissions, 'fix' the default PEAR permissions and config:
    chmod -R ug+w /usr/local/Cellar/php53/5.3.29/lib/php
    pear config-set php_ini /usr/local/etc/php/5.3/php.ini

✩✩✩✩ Extensions ✩✩✩✩

If you are having issues with custom extension compiling, ensure that
you are using the brew version, by placing /usr/local/bin before /usr/sbin in your PATH:

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

PHP53 Extensions will always be compiled against this PHP. Please install them
using --without-homebrew-php to enable compiling against system PHP.

✩✩✩✩ PHP CLI ✩✩✩✩

If you wish to swap the PHP you use on the command line, you should add the following to ~/.bashrc,
~/.zshrc, ~/.profile or your shell's equivalent configuration file:

export PATH="$(brew --prefix homebrew/php/php53)/bin:$PATH"

To have launchd start php53 at login:
    ln -sfv /usr/local/opt/php53/*.plist ~/Library/LaunchAgents
Then to load php53 now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php53.plist
==> Summary
   /usr/local/Cellar/php53/5.3.29: 480 files, 31M, built in 12.9 minutes

   
等待PHP编译完成,开始安装PHP常用扩展,扩展安装过程中 brew会自动安装依赖包,使用 brew search php53- 命令,可以查看还有哪些扩展可以安装,然后执行 brew install php53-XXX 就可以了。

由于Mac自带了php和php-fpm,因此需要添加系统环境变量PATH来替代自带PHP版本:

echo 'export PATH="$(brew --prefix homebrew/php/php53)/bin:$PATH"' >> ~/.bash_profile  #for php
echo 'export PATH="$(brew --prefix homebrew/php/php53)/sbin:$PATH"' >> ~/.bash_profile  #for php-fpm
echo 'export PATH="/usr/local/bin:/usr/local/sbin:$PATH"' >> ~/.bash_profile #for other brew install soft
source ~/.bash_profile  #更新配置

如何卸载安装的 php5.3呢?

# 卸载
brew uninstall php53
# 清除缓存以及老旧版本文件
brew cleanup -s

测试一下效果:

$ php -v
PHP 5.3.29 (cli) (built: Jan 24 2015 12:40:58) (DEBUG)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies

# mac系统自带的php
$ /usr/bin/php -v
PHP 5.4.30 (cli) (built: Jul 29 2014 23:43:29)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend Guard Loader v3.3, Copyright (c) 1998-2013, by Zend Technologies

由于我们没有安装php的fpm模式,所以 php-fpm -v 命令显示的是mac自带的:
$ php-fpm -v
PHP 5.4.30 (fpm-fcgi) (built: Jul 29 2014 23:44:15)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
with Zend Guard Loader v3.3, Copyright (c) 1998-2013, by Zend Technologies

 
这个时候,我们使用 phpinfo 函数显示出来的php版本还是max自带的PHP5.4,需要我们修改 apache的配置文件 httpd.conf,加载的php5模块路径指向刚刚安装的 php5.3目录里的 libphp5.so:

LoadModule php5_module    /usr/local/opt/php53/libexec/apache2/libphp5.so
 
重启apache,phpinfo() 脚本里显示的 php 版本就变成了 PHP Version 5.3.29。

php_imagick是一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能,现在我们来看看在Linux下php如何安装imagick。

说明:
php安装目录:/usr/local/php5
php.ini配置文件路径:/usr/local/php5/etc/php.ini
Nginx安装目录:/usr/local/nginx
Nginx网站根目录:/usr/local/nginx/html

1、安装编译工具
yum install wget make gcc gcc-c++ gtk+-devel zlib-devel openssl openssl-devel pcre-devel kernel keyutils patch perl

2、安装ImageMagick
系统运维www.osyunwei.com温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接
cd /usr/local/src#进入软件包存放目录
wgethttp://www.imagemagick.org/download/ImageMagick.tar.gz#下载ImageMagick
tar zxvf ImageMagick.tar.gz#解压
cd ImageMagick-6.7.9-3#进入安装目录
./configure --prefix=/usr/local/imagemagick#配置
make#编译
make install#安装
export PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig/#设置环境变量

3、安装imagick
cd /usr/local/src
wgethttp://pecl.php.net/get/imagick-3.0.1.tgz#下载imagick
tar zxvf imagick-3.0.1.tgz
cd imagick-3.0.1
/usr/local/php5/bin/phpize#用phpize生成configure配置文件
./configure --with-php-config=/usr/local/php5/bin/php-config --with-imagick=/usr/local/imagemagick#配置
make#编译
make install#安装
备注:在安装过程中出现错误,一般是由于缺少编译工具包导致,可根据提示参照第一步安装相应的工具包即可
安装完成之后,出现下面的界面,记住以下路径,后面会用到
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/#imagick模块路径

4、配置php支持imagick
vi /usr/local/php5/etc/php.ini#编辑配置文件,在最后一行添加以下内容
extension="imagick.so"

5、测试
vi /usr/local/nginx/html/phpinfo.php#编辑,输入以下代码
<?php
phpinfo();
?>
wq!#保存退出
vi /usr/local/nginx/html/imagick.php#编辑,输入以下代码
<?php
header('Content-type: image/jpeg');
$image = new Imagick('www.osyunwei.com.jpg');
// If 0 is provided as a width or height parameter,
// aspect ratio is maintained
$image->thumbnailImage(300, 225);
echo $image;
?>

本教程我们来讲讲最新版的php5.6在Linux下源码编译安装及集成到apache上,apache对php的支持是通过apache的mod_php5模块来支持的。

apache对php的支持是通过apache的mod_php5模块来支持的,这点与nginx不同。nginx是通过第三方的fastcgi处理器才可以对php进行解析。

如果源码编译安装php的话,需要在编译时指定--with-apxs2=/usr/local/apache2/bin/apxs表示告诉编译器通过apache的mod_php5模块来提供对php的解析。

同时php安装的最后一步make install时,我们会看到将动态链接库libphp5.so拷贝到apache2的安装目录的modules目录下,并且还需要在 httpd.conf配置文件中添加LoadModule语句来动态将libphp5.so模块加载进来,从而实现Apache对php的支持。

php与apache集成需要以下几个步骤:

1、安装libiconv库

2、php源码安装

3、配置apache使其支持php

4、测试php

一、安装libiconv库

libiconv库为需要做转换的应用程序提供了一个iconv命令,以实现一个字符编码到另一个字符编码的转换,比如它可以将UTF8编码转换成GB18030编码,反过来也行。

php与apache集成时一定要安装libiconv库,否则在make时系统会报错。报错信息如下:

make: *** [sapi/cli/php] Error 1

/usr/bin/ld: cannot find -liconv

collect2: ld returned 1 exit status

make: *** [sapi/cli/php] Error 1

clip_image001

 

现在开始正式安装libiconv库,首先下载libiconv库,如下:

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

clip_image002

 

解压libiconv库,如下:

tar -xf libiconv-1.14.tar.gz

clip_image003

 

安装libiconv库,首先查看安装帮助信息。如下:

./configure --help

clip_image004

 

通过上图的帮助,我们可以看到libiconv库默认的安装路径为/usr/local。现在开始安装libiconv库,如下:

./configure --prefix=/usr/local

make && make install

clip_image005

 

clip_image006

 

libiconv库安装完毕后,建议把/usr/local/lib库加入到到/etc/ld.so.conf文件中,然后使用/sbin/ldconfig使其生效。如下:

echo "/usr/local/lib">>/etc/ld.so.conf

/sbin/ldconfig

clip_image007

 

如果没有进行此步操作的话,在安装php执行make install,系统就会报错。报错信息如下:

/root/php-5.6.2/sapi/cli/php: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

二、php源码安装

下载并编译php命令如下:

wget http://mirrors.sohu.com/php/php-5.6.2.tar.gz

./configure --enable-fpm --enable-mbstring --with-mysql=/usr/local/mysql --with-iconv-dir=/usr/local --with-apxs2=/usr/local/apache2/bin/apxs

clip_image008

 

clip_image009

 

注意上述命令中--enable-fpm的作用是开启php的fastcgi功能,即开启php-fpm功能。

--with-mysql=/usr/local/mysql是启用php支持mysql的功能,/usr/local/mysql是mysql数据库的安装路径。

--enable- mbstring表示启用mbstring模块mbstring模块的主要作用在于检测和转换编码,提供对应的多字节操作的字符串函数。目前php内部的编码只支持ISO-8859-*、EUC-JP、UTF-8,其他的编码的语言是没办法在php程序上正确显示的,所以我们要启用mbstring模块。

--with-iconv-dir=/usr/local指定php存放libiconv库的位置。

--with-apxs2=/usr/local/apache2/bin/apxs指定php查找apache的位置。

编译完毕后,我们再来make。在make时,我们注意要加上-liconv参数。如果不加上-liconv参数,系统在make编译会报错。报错信息如下:

Generating phar.php

php-5.3.16/sapi/cli/php: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

使用命令如下:

make ZEND_EXTRA_LIBS='-liconv'

我们也可以通过修改Makefile文件,在ZEND_EXTRA_LIBS行加入-liconv。如下:

clip_image010

 

vi Makefile

clip_image011

 

make install

clip_image012

 

通过上图,我们可以很明显的看到apache配置文件httpd中启用php支持,同时也把libphp5.so文件复制到apache的模块目录下。

三、配置apache使其支持php

php安装完毕后,我们就可以通过修改apache的配置文件httpd.conf来使其支持php。

我们只需要在httpd.conf文件中加入如下两行代码:

LoadModule php5_module modules/libphp5.so

AddType application/x-httpd-php .php

注意,其中LoadModule php5_module modules/libphp5.so行,我们查看httpd.conf文件时会发现该行已经存在。那是因为在安装php时,添加的。现在我们只需要添加 AddType application/x-httpd-php .php行即可。

vi /usr/local/apache2/conf/httpd.conf

clip_image013

 

除此之外,我们还需要修改apache的默认主页文件,添加index.php。内容如下:

echo "">/usr/local/apache2/htdocs/index.php

cat /usr/local/apache2/htdocs/index.php

clip_image014

 

clip_image015

 

四、测试php

以上修改完毕后,我们重新启动apache,使用如下命令:

/etc/init.d/httpd graceful

注意该命令可以优雅的重启apache。

clip_image016

 

打开站点,如下:

clip_image017

 

通过上图,我们可以很明显的看到apache已经支持php。

LNMP环境中的nginx是不支持php的,需要通过fastcgi来处理有关php的请求。而php需要php-fpm这个组件来支持。

在php5.3.3以前的版本php-fpm是以一个补丁包的形式存在的,而php5.3.3以后的php-fpm只需要在安装php-fpm开启这个功能即可。这个也就是前边,我们再配置php使用到的那个命令--enable-fpm。

php-fpm功能开启后,我们还需要配置php-fpm。其实php-fpm的配置文件在安装php时,已经为我们提供了一个配置文件的模版。该模版为/usr/local/etc/php-fpm.conf.default,如下:

more /usr/local/etc/php-fpm.conf.default

clip_image012[4]

 

我们现在只需要复制一份该文件,并重命名为php-fpm.conf,如下:

cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf

clip_image013[4]

 

为了让php-fpm已服务的形式启动。我们需要复制php安装目录下/sapi/fpm/init.d.php-fpm文件。如下:

cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

clip_image014[4]

 

通过上图,我们也可以很清楚的看到php-fpm文件目前没有执行权限。赋予php-fpm执行权限,并启动php-fpm,如下:

chmod a+x /etc/init.d/php-fpm

/etc/init.d/php-fpm start

netstat -tunlp |grep 9000

clip_image015[4]

 

通过上图,我们可以很明显的看到php-fpm已经正常启动。

注意php-fpm默认监听的是9000端口。

现在再来配置nginx,使其支持php,如下:

location ~ .php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

clip_image016[4]

 

然后在nginx的网站根目录下新建index.php文件内容如下:

vi /usr/local/nginx/html/index.php

clip_image017[4]

 

现在来启动nginx,如下:

/usr/local/nginx/sbin/nginx

netstat -tunlp |grep 80

clip_image018[4]

 

nginx启动完毕后,现在来访问网站,如下:

clip_image019[4]

 

clip_image020[4]

 

通过上图,我们可以很明显的看到。php目前已经安装成功,并且也成功的支持mysql数据库。同时也与nginx集成完毕。

至此。我们的php5.6的安装到此结束。

新手开发php时,装环境是一个比较麻烦的问题,幸好牛人多,把php环境打在包里面一键安装,现在我们来看看一键php环境安装XAMPP(Apache+MySQL+PHP+PERL)在windows环境下如何配置多站点。

window下的hosts文件

首先找到C:WindowsSystem32driversetc目录下的hosts文件,此文件在当前目录下是无法修改的,所以必须复制出来(到桌面),然后在文件尾部添加上你所需要的站点域名

以hosts文件为例,其本身配置了 127.0.0.1 localhost 前段是表示访问的主机IP,后一段是表示要访问的域名

所以如果需要配置一个www.111cn.net的域名只需要加上 127.0.0.1 www.111cn.即可。

最后我在网上了解到windows下的hosts文件其作用就是‘将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析。’应该是类似一个 key-value键值对的方式去解析域名,如果能在本机找到相应IP则访问当前IP。

apche的vhost配置文件

先找到vhost所在目录D:\xampp\apache\conf\extra,自己对应安装的xampp的目录去寻找,找到vhost文件后,打开会看到如下系统配置:

DocumentRoot "D:\xampp\htdocs"
ServerName localhost
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common

Options Indexes FollowSymLinks Includes ExecCGI
Require all granted
Order allow,deny
Allow from all
AllowOverride AuthConfig

如果你看过很多配置文件的话,相信能一眼就看清楚,因为我们之前配置了windows下的hosts文件的虚拟主机域名为www.test.com所以在vhost文件中应该这样配置:

 

 代码如下 复制代码
ServerAdmin
DocumentRoot "D:\workspace\php\project\public"
ServerName local.test.com
ErrorLog "logs/dummy-host.example.com-error.log"
CustomLog "logs/dummy-host.example.com-access.log" common

<Directory "D:\workspace\php\project\public">
   Options Indexes FollowSymLinks Includes ExecCGI
   Require all granted
</Directory>

<IfModule mod_rewrite.c>

   <Directory "D:\workspace\php\project">
       RewriteEngine on
       RewriteRule  ^$ public/    [L]
       RewriteRule  (.*) public/$1 [L]
   </Directory>

   <Directory "D:\workspace\php\project\public">
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
   </Directory>
</IfModule>


可能不同人的Directory 目录配置不一样,一般系统默认是放在D:\xampp\htdocs下,但是为了方便放不同的几个项目,我们一般习惯的把系统默认的访问目录配置到我们的工作目录下,以我的为例:D:/workspace/php/下对应不同的项目目录。

最后如果还是不能访问的话,请检查xampp下的httpd.conf文件中的 Include conf/extra/httpd-vhosts.conf这条语句是否被注释掉,如果被注释掉则去掉注释语句。

 

[!--infotagslink--]

相关文章

  • Laravel4安装配置的方法

    如果我们需要安培Laravel4的话最php最低要求要在php5.3.7版本并且我们需要把mcrypt与openss这两个扩展开启才可以,具体步骤我们参考下文。 前面我们介绍我了 com...2016-11-25
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • 带你了解PHP7 性能翻倍的关键

    20岁老牌网页程序语言PHP,最快将在10月底释出PHP 7新版,这是十年来的首次大改版,最大特色是在性能上的大突破,能比前一版PHP 5快上一倍,PHP之父Rasmus Lerdorf表示,甚至能比HHVM虚拟机下的PHP程序性能更快。HHVM 是脸书为自...2015-11-24
  • 利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)

    这篇文章主要介绍了利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化),本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-24
  • JavaScript提高网站性能优化的建议(二)

    这篇文章主要介绍了JavaScript提高网站性能优化的建议(二)的相关资料,需要的朋友可以参考下...2016-07-29
  • 提升jQuery的性能需要做好七件事

    这篇文章主要介绍了提升jQuery的性能需要做好的七件事,希望真的帮助大家提升jQuery性能,需要的朋友可以参考下...2016-01-14
  • php测试性能代码

    php测试性能代码 function microtime_float () { list ($usec, $sec) = explode(" ", microtime()); return ((float) $usec + (float) $sec); } functio...2016-11-25
  • PHP Libevent扩展安装配置及简单应用

    Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,下文我们就一起来看PHP Libevent扩展安装...2016-11-25
  • PS自由变换工具使用教程 ps自由变换快捷键是什么

    本次为大家带来的是PS自由变换工具使用教程,详细的为大家说明了PS自由变换工具的快捷键、所在位置、功能以及使用方法,下面请看详细的介绍。 快捷键:Ctrl+T 所...2016-12-15
  • css中空路径对页面性能影响的解决方案

    文章介绍了css中空路径对页面性能影响的解决方案,这个可能很多美工朋友不会去注意这一点,下面我们来看看吧。 在写 CSS 的时候,用 background:url(#) 还是会对页面进...2017-07-06
  • Ubuntu Server 18.04.5 LTS服务器版安装配置图解教程

    Ubuntu分为桌面版(desktop)和服务器版(Server),下面为大家介绍服务器版本Ubuntu Server 18.04.5 LTS的详细安装过程,需要的朋友可以参考下...2021-02-01
  • Redis 执行性能测试

    这篇文章主要介绍了Redis 执行性能测试的方法,文中讲解非常细致,帮助大家更好的理解和学习redis,感兴趣的朋友可以了解下...2021-01-15
  • 如何用Node.js编写内存效率高的应用程序

    这篇文章主要介绍了如何用Node.js编写内存效率高的应用程序,对Node.js感兴趣的同学,可以参考下...2021-05-01
  • PHPStorm主题安装配置方法详解

    由于在php开发时很多函数命令都只记得一个部份,如果要全写还得百度,后来听说有一个PHPStorm可实现自动补全,我就下载了一个并安装配置了,下面给各位朋友介绍。 为...2016-11-25
  • 浅析Mysql Join语法以及性能优化

    一.Join语法概述join 用于多表中字段之间的联系,语法如下:复制代码 代码如下:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditionatable1:左表;table2:右表。JOIN 按照功能大致分为如下三类:INNER JOIN(内连接,或...2014-05-31
  • php反斜杠处理函数addslashes()和stripslashes()的使用教程

    这篇文章写了php反斜杠处理函数addslashes()和stripslashes()的使用教程,学习过程中遇到问题的同学快来看看吧! php 反斜杠处理函数 addslashes():对输入字符串中的...2016-12-31
  • Windows下PHP安装配置PEAR的方法

    PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写。PEAR库更新很快,它是一个强大的代码仓库,每个PHP程序员都应该掌握的工具。 Windows...2016-11-25
  • C#导出数据到excel如何提升性能

    这篇文章主要介绍了C#导出数据到excel如何提升性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-13
  • 美图秀秀美白皮肤功能怎么用 美白皮肤功能使用教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说一说美白皮肤功能的使用教程,各位想知道具体信息的使用者们,那么下面就快来跟着小编一起看一看教程吧。 ...2016-09-14
  • C#中Dynamic和Dictionary性能比较

    开发中需要传递变参,考虑使用 dynamic 还是 Dictionary,dynamic 的编码体验显著优于 Dictionary,如果性能差距不大的话,我会选择使用dynamic。下面通过本文给大家详细介绍下C#中Dynamic和Dictionary性能比较,一起看看吧...2020-06-25