问题描述
问题
我正在尝试使用XHProf,但每次运行时我都会遇到可怕的php错误。
Warning: Invalid argument supplied for foreach() in xhprof_compute_inclusive_times() (line 1670 of /var/www/drupal/sites/all/modules/XHProf/xhprof.inc).
Warning: Invalid argument supplied for foreach() in xhprof_compute_flat_info() (line 1644 of /var/www/drupal/sites/all/modules/XHProf/xhprof.inc).
Warning: Invalid argument supplied for foreach() in theme_xhprof_overall_summary() (line 367 of /var/www/drupal/sites/all/modules/XHProf/xhprof.module).
问题解决了here,因为临时文件夹不存在,但是我的确存在。
Set-Up服务器端
我正在使用Drupal 7运行新的Ubuntu Server 13.04。
按照说明书here使用pear
安装xhprof。我还为php.ini添加了一个临时目录,我手动创建了该目录。
extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"
Drupal Set-Up
我安装了devel,并且还安装了XHProf模块。
在admin/config/development/xhprof
中,我启用了所有页面查看和drush请求的分析。
在关注xhprof链接后,我得到上面的错误。
最佳解决方法
好神蝙蝠侠。这令人非常沮丧。这是让xhprof工作的指南。 (注意:我对Linux很新。我不确定我使用的权限是否安全,或者是否有更好的方法。我只在测试环境中执行此操作。)
重要提示:它不会告诉您有关如何解释它的任何信息。我不知道怎么做,我很高兴它有效。
让XHProf工作
1.你在运行什么操作系统?
Mac还是Linux?
这是可能的。
视窗?
可能不会。要在Windows上运行xhprof,您必须有一个已编译的dll。这个thread中有一个链接,但是当我尝试在XAMPP上使用它时,我总是遇到兼容性问题。
我认为它是用不同版本的Apache编译的。
2.让它在Ubuntu上工作
这可能在Mac上。这里有两个有用的链接:
http://www.lullabot.com/blog/article/installing-xhprof-mamp-and-php-52-mac-os-106-snow-leopard http://www.midwesternmac.com/blogs/jeff-geerling/getting-xhprof-working-well
但我还没有这样做。我设法让它在Ubuntu Server 13.04上工作,虽然我认为任何最新版本的Ubuntu Server都可以工作。
我在VirtualBox上的set-up我的服务器。 VirtualBox是免费的,但可能需要一些时间来学习如何设置它。
3.安装XHProf
我假设我们有一个功能齐全的Ubuntu服务器。
首先我们需要安装梨。我们将使用它来安装XHProf。
sudo apt-get install pear
我们用phpdev跟进这个也是必需的。
sudo apt-get install php5-dev
如果这些命令不起作用并且我弄错了,那就直接进行:
sudo pecl install -f xhprof
Ubuntu会告诉你你缺少的东西,并提示你安装它。一旦你获得了所有依赖项安装xhprof。
您可能会在安装xhprof时遇到错误,它会尝试下载测试版并失败。在那种情况下尝试:
sudo pecl install -f xhprof-beta
希望xhprof现在已安装。
现在我们需要配置它。打开位于/etc/php5/apache2/php.ini
的php.ini,并在extensions部分下添加以下两行:
extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"
第二行设置输出目录。如果此文件夹不存在,则必须创建它。当您使用完成重启apache时
sudo service apache2 restart
4.检查XHProf是否正在运行
现在我们需要检查一下是否有效。
测试1:
输入php -m
如果你在列表中看到xhprof,那么你很高兴。如果没有,请不要担心,请尝试这样做以检查它是否正常工作:
转到您的webroot /var/www/
并创建一个仅包含以下内容的php文件:
phpinfo();
将其保存为phpinfo.php。在浏览器中打开它,您应该看到PHP信息。搜索xhprof,如果你看到它,那么它正在运行。
5.让它与Drupal一起工作
我无法使用Drupal模块。所以相反,我将告诉你如何使用devel模块。
首先是我从here借来的一些配置。我没有真正遵循这一部分,但它的作用就是礼物马等等。
使用以下命令创建新的配置文件:
sudo nano /etc/apache2/conf.d/xhprof.conf
并插入以下代码。
alias /xhprof_html "/usr/share/php/xhprof_html/"
然后我们可能需要为xhprof_html文件夹创建一个符号链接。所以,以防万一设置:
ln -s /usr /share /php /xhprof_html /var /www /xhprof_html
这将在您的webroot中创建一个指向现有xhprof文件的文件夹。然后在浏览器中打开http://mywebsitehere.com/xhprof以查看您已完成的所有运行。
然后重启apache。现在是时候进行一些开发配置了。转到开发设置,启用xhprof并设置:
xhprof directory = /usr/share/php
XHProf URL = /xhprof_html
现在,在每个页面的底部,您应该看到一个指向xhprof的小链接。
点击它会带你到一个看起来像这样的页面。你完成了。恭喜!
如果这不起作用并且你得到运行错误,那可能是因为Drupal没有权限写入我们之前设置的tmp文件夹,因此输入:
sudo chown -R www-data /var/tmp/xhprof
希望这有效。我们完成了。 Hoorah!
除非你想要图形功能。值得庆幸的是,这很简单:
sudo apt-get install graphviz
sudo service apache2 restart
现在你应该有图形功能。希望这有帮助!