0

vld を使用して、php ファイルのオペコードを表示しようとしています

準備

vld を次のようにインストールしました。

pecl install channel://pecl.php.net/vld-0.12.0

VLD に慣れるために、php ファイル (echo1 と echo2) と比較しようとしています。

echo1.php

<?php
echo "Hello"." "."World";

echo2.php

<?php
echo "Hello"," ","World";

phpinfo() は、vld が有効になっているように見えることを示しています。

vld support        enabled

Directive   Local Value Master Value
vld.active         0    0
vld.col_sep             
vld.dump_paths     1    1
vld.execute        1    1
vld.format         0    0
vld.save_dir       /tmp /tmp
vld.save_paths     0    0
vld.skip_append    0    0
vld.skip_prepend   0    0
vld.verbosity      1    1

問題

PHPファイルを実行すると、オペコードの代わりに出力が表示されます

# php -dvld.active=1 -f echo1.php
Hello World

# php -dvld.active=1 -dvld.execute=0 -f echo1.php
Hello World

# php -dvld.active=1 -f echo2.php
Hello World

# php -dvld.active=1 -dvld.execute=0 -f echo2.php
Hello World

明らかに私は何かが欠けています:)

実行中のバージョン

PHPバージョン

# php -v
PHP 5.4.4-14+deb7u14 (cli) (built: Aug 21 2014 08:36:44)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

Apache 2.2.22 を使用して Virtualbox で Debian を実行する

4

2 に答える 2

2

PHP 5.6.2 に更新した後、もう一度試してみましたが、実行中です :)

PHPバージョン

# php -v
PHP 5.6.2 (cli) (built: Oct 17 2014 07:22:10)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

インストール梨

yum install php56w-pear

vld のインストール

pecl install vld

/etc/php.ini (または /etc/php.d/__.ini 内のファイル) に拡張子を追加します。

#/etc/php.d/vld.ini
extension=vld.so

httpd サービスを再起動し、再度テストします (指を交差させます)

 # php -dvld.active=1 -f echo1.php
 Finding entry points
 Branch analysis from position: 0
 Jump found. Position 1 = -2
 filename:       /var/www/html/echo1.php
 function name:  (null)
 number of ops:  4
 compiled vars:  none
 line     #* E I O op                           fetch          ext  return  operands
 -------------------------------------------------------------------------------------
    2     0  E >   CONCAT                                           ~0      'Hello', '+'
          1        CONCAT                                           ~1      ~0, 'World'
          2        ECHO                                                     ~1
    3     3      > RETURN                                                   1

 branch: #  0; line:     2-    3; sop:     0; eop:     3; out1:  -2
 path #1: 0,
 Hello World

ブームベイビー!

理由はわかりませんが、期待どおりに動作しています:)

さぁ、OPCODEの冒険が始まる(ラブストーリーでもある)

于 2014-11-14T13:51:11.480 に答える
0

extension.so間違った php.ini ファイル に追加している可能性があります

cli バージョンの代わりに Web サーバーで使用する拡張機能を php.ini に追加している可能性があります。

実行できることは、 を実行しlocate php.ini、php.ini の cli バージョンを選択して、extension.soそのファイルに追加することです

通常、php.ini の cli バージョンは次の場所にあります。/etc/php5/cli/php.ini

コンソールも再起動することを忘れないでください

于 2015-01-20T16:43:14.543 に答える