Problème
J'essaie d'utiliser XHProf mais je reçois une horrible erreur php à chaque fois qu'il s'exécute.
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).
Le problème est résolu ici car le dossier temporaire n'existe pas, contrairement au mien.
Configuration côté serveur
J'utilise un nouveau serveur Ubuntu 13.04 avec Drupal 7.
Installez xhprof en utilisant pear
en suivant les instructions ici . J'ai également ajouté un répertoire temporaire à php.ini, que j'ai créé manuellement.
extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"
Configuration Drupal
J'ai à la fois le devel installé et j'ai également installé le module XHProf.
Dans admin/config/development/xhprof
, J'ai activé le profilage de toutes les pages vues et des requêtes drush.
En suivant un lien xhprof, j'obtiens l'erreur ci-dessus.
Bon dieu Batman. C'était incroyablement frustrant. Voici un guide pour faire fonctionner xhprof. (Remarque: je suis très nouveau sur Linux. Je ne sais pas si les autorisations que j'utilise sont sûres ou s'il existe une meilleure façon de le faire. Je ne le ferais que dans un environnement de test.)
IMPORTANT: Il ne vous dira rien sur la façon de l'interpréter. Je ne sais pas comment faire, je suis juste content que ça marche.
Faire fonctionner XHProf
1. Quel système d'exploitation utilisez-vous?
Mac ou Linux?
C'est possible.
Les fenêtres?
Probablement pas. Pour exécuter xhprof sur Windows, vous devez avoir une DLL compilée. Il y a un lien vers un dans ce thread , mais j'ai toujours eu des problèmes de compatibilité avec lui quand j'ai essayé de l'utiliser sur XAMPP.
Je pense qu'il a été compilé avec une version différente d'Apache.
2. Le faire fonctionner sur Ubuntu
C'est possible sur Mac. Voici deux liens utiles:
http://www.lullabot.com/blog/article/installing-xhprof-mamp-and-php-52-mac-os-106-snow-leopardhttp: // www.midwesternmac.com/blogs/jeff-geerling/getting-xhprof-working-well
Mais je ne l'ai pas fait. J'ai réussi à le faire fonctionner sur Ubuntu Server 13.04, bien que je pense que n'importe quelle version récente d'Ubuntu Server fonctionnerait.
J'ai installé mon serveur sur VirtualBox. VirtualBox est gratuit mais cela peut prendre un peu pour apprendre à le configurer.
3.Installation de XHProf
Je vais supposer que nous avons un serveur Ubuntu pleinement fonctionnel.
Nous devons d'abord installer la poire. Nous l'utiliserons pour installer XHProf.
Sudo apt-get install pear
Nous suivons cela avec phpdev qui est également nécessaire.
Sudo apt-get install php5-dev
Si ces commandes ne fonctionnent pas et que je me trompe, continuez tout de suite avec:
Sudo pecl install -f xhprof
Ubuntu vous dira ce que vous manquez et vous invitera à l'installer. Une fois que vous avez toutes les dépendances, installez xhprof.
Vous pourriez obtenir une erreur lors de l'installation de xhprof, il essaiera de télécharger la version bêta et échouera. Dans ce cas, essayez:
Sudo pecl install -f xhprof-beta
Espérons que xhprof soit maintenant installé.
Maintenant, nous devons le configurer. Ouvrez votre php.ini qui est à /etc/php5/Apache2/php.ini
et ajoutez les deux lignes suivantes sous la section extensions:
extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"
La deuxième ligne définit le répertoire de sortie. Si ce dossier n'existe pas, vous devrez le créer. Une fois le redémarrage d'Apache effectué,
Sudo service Apache2 restart
4. Vérifier si XHProf est en cours d'exécution
Maintenant, nous devons vérifier si cela a fonctionné.
Test 1:
Entrer php -m
Si vous voyez xhprof dans la liste, vous êtes prêt à partir. Sinon, ne vous inquiétez pas, essayez plutôt de vérifier si cela fonctionne:
Accédez à votre webroot /var/www/
et créer un fichier php avec seulement:
phpinfo();
Enregistrez-le sous phpinfo.php. Ouvrez ceci dans votre navigateur et vous devriez voir PHP informations. Recherchez xhprof et si vous voyez cela, alors il fonctionne.
5. Faire fonctionner avec Drupal
Je ne pouvais pas le faire fonctionner avec le module Drupal. Donc, à la place, je vais vous dire comment le faire fonctionner avec le module devel.
D'abord une config que j'ai empruntée à ici . Je n'ai pas vraiment suivi cette partie, mais ça marche donc cadeau cheval et tout ça.
Créez un nouveau fichier de configuration avec la commande suivante:
Sudo nano /etc/Apache2/conf.d/xhprof.conf
et insérez le code suivant.
alias /xhprof_html "/usr/share/php/xhprof_html/"
Ensuite, nous devons éventuellement créer un lien symbolique vers notre dossier xhprof_html. Donc, juste au cas où définir ceci:
ln -s/usr/share/php/xhprof_html/var/www/xhprof_html
Cela va créer un dossier dans votre racine Web qui pointe vers le fichier xhprof existant. Ensuite, dans votre navigateur, vous pouvez ouvrir http://mywebsitehere.com/xhprof pour voir toutes les courses que vous avez faites.
Redémarrez ensuite Apache. Il est maintenant temps pour une petite configuration. Accédez aux paramètres de développement, activez xhprof et définissez:
xhprof directory = /usr/share/php
XHProf URL = /xhprof_html
Maintenant, au bas de chaque page, vous devriez voir un petit lien vers xhprof.
Et cliquer dessus devrait vous amener à une page qui ressemble à ceci. Vous avez terminé. Toutes nos félicitations!
Si cela ne fonctionne pas et que vous obtenez des erreurs d'exécution, c'est probablement parce que Drupal n'a pas la permission d'écrire dans le dossier tmp que nous avons défini plus tôt, entrez donc:
Sudo chown -R www-data /var/tmp/xhprof
Et j'espère que cela fonctionne. Avaient fini. Hoorah!
A moins que vous ne vouliez des fonctions graphiques. Heureusement, c'est aussi simple que:
Sudo apt-get install graphviz
Sudo service Apache2 restart
Et maintenant, vous devriez avoir des fonctions graphiques. J'espère que cela aide!