日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php dvld.active 1,PHP的字符串

發布時間:2023/12/19 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php dvld.active 1,PHP的字符串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

與C語言不同, php中有二種字符串,單引號的與雙引號的。。。

在php內部,使用單引號和使用雙引號,有什么區別呢?

把變量放到雙引號字符串中,與使用.進行字符串連接,哪種方式更省內存呢?

Vulcan Logic Disassembler介紹與安裝

Vulcan Logic Disassembler ,簡稱VLD。D也是Dumper的意思。

它是一個php的擴展(extension), 通過它可以看到PHP編譯之后的Opcode。

下載地址:

http://pecl.php.net/package/vld

作者的主頁: http://derickrethans.nl/projects.html#vld

xdebug也是此人所寫。

環境說明

php5.2.13安裝在了/home/modify/test/ 目錄中。

/home/modify/test/php-5.2.13/ 是PHP的源碼目錄。

php位于 /home/modify/test/bin/php

phpize位于 /home/modify/test/bin/phpize

php-config位于 /home/modify/test/bin/php-config

php.ini位于 /home/modify/test/lib/php.ini

php.ini中設置的extension_dir: extension_dir = “/home/modify/test/ext/”

下載vld

[

root@

masalife.com]

# cd /home/modify/test/php-5.2.13/ext

[

root@

masalife.com]

# svn co svn://svn.xdebug.org/svn/php/vld/trunk vld

編譯與安裝

[

root@

masalife.com]

# cd /home/modify/test/php-5.2.13/ext/vld

[

root@

masalife.com]

# /home/modify/test/bin/phpize

[

root@

masalife.com]

# ./configure --enable-vld --with-php-config=/home/modify/test/bin/php-config

[

root@

masalife.com]

# make

[

root@

masalife.com]

# cp modules/vld.so /home/modify/test/ext/

[

root@

masalife.com]

# vi /home/modify/test/lib/php.ini

在最后面加上 extension

=vld.so

這樣就安裝完畢了。可以看一下phpinfo,有沒有加載到 vld.so。

這個extension有二個參數:

vld.active 1表示啟用 0禁用

vld.execute 1運行代碼 0只顯示Opcode,不運行代碼

沒有必要把它們寫到php.ini中。恩,沒有必要。直接在命令行中指定就可以了。

使用vld

來看看下面的PHP代碼編譯成Opcode之后是什么樣子的:

雙引號的echo

echo

"huarong@masalife.com"

;

[

root@

masalife.com]

# /home/modify/test/bin/php -dvld.active=1 -dvld.execute=0 /tmp/aabi432o32.php

number of ops: 3

compiled vars: none

line # * op fetch ext return operands

---------------------------------------------------------------------------------

2

0

>

ECHO OP1[

IS_CONST (

5959335

)

'huarong%40masalife.com'

]

4

1

>

RETURN OP1[

IS_CONST (

0

)

1

]

2

*

>

ZEND_HANDLE_EXCEPTION

op總數量3。

@被轉義成為 %40 。 和urlencode一樣的哈。

雙引號被轉化成為單引號了!!

單引號的echo

echo

'huarong@masalife.com'

;

[

root@

masalife.com]

# /home/modify/test/bin/php -dvld.active=1 -dvld.execute=0 /tmp/aabi432o32.php

number of ops: 3

compiled vars: none

line # * op fetch ext return operands

---------------------------------------------------------------------------------

2

0

>

ECHO OP1[

IS_CONST (

11450330

)

'huarong%40masalife.com'

]

4

1

>

RETURN OP1[

IS_CONST (

0

)

1

]

2

*

>

ZEND_HANDLE_EXCEPTION

仍然是單引號。

雙引號字符串中的變量

$a

=

"modify"

;

echo

"huarong@masalife.com $a

"

;

[

root@

masalife.com]

# /home/modify/test/bin/php -dvld.active=1 -dvld.execute=0 /tmp/aabi432o32.php

number of ops: 7

compiled vars: !

0

= $a

line # * op fetch ext return operands

---------------------------------------------------------------------------------

2

0

>

ASSIGN OP1[

IS_CV !

0

]

OP2[

, IS_CONST (

628503

)

'modify'

]

3

1

INIT_STRING RES[

IS_TMP_VAR ~1

]

2

ADD_STRING RES[

IS_TMP_VAR ~1

]

OP1[

IS_TMP_VAR ~1

]

OP2[

, IS_CONST (

628186

)

'huarong%40masalife.com+'

]

3

ADD_VAR RES[

IS_TMP_VAR ~1

]

OP1[

IS_TMP_VAR ~1

]

OP2[

, IS_CV !

0

]

4

ECHO OP1[

IS_TMP_VAR ~1

]

5

5

>

RETURN OP1[

IS_CONST (

0

)

1

]

6

*

>

ZEND_HANDLE_EXCEPTION

0 ASSIGN 是為$a賦值

之后的echo語句竟然變成了4行opcode:

INIT_STRING, ADD_STRING, ADD_VAR, ECHO。

INIT_STRING是初始化整個string

ADD_STRING是添加 “huarong@masalife.com ”

ADD_VAR是添加$a

ECHO就輸出了。

如果是 echo “huarong@masalife.com $a abc”

在ADD_VAR之后,還要再ADD_STRING “abc”。

number of ops: 8

compiled vars: !

0

= $a

line # * op fetch ext return operands

---------------------------------------------------------------------------------

2

0

>

ASSIGN OP1[

IS_CV !

0

]

OP2[

, IS_CONST (

3396580

)

'modify'

]

3

1

INIT_STRING RES[

IS_TMP_VAR ~1

]

2

ADD_STRING RES[

IS_TMP_VAR ~1

]

OP1[

IS_TMP_VAR ~1

]

OP2[

, IS_CONST (

3396263

)

'huarong%40masalife.com+'

]

3

ADD_VAR RES[

IS_TMP_VAR ~1

]

OP1[

IS_TMP_VAR ~1

]

OP2[

, IS_CV !

0

]

4

ADD_STRING RES[

IS_TMP_VAR ~1

]

OP1[

IS_TMP_VAR ~1

]

OP2[

, IS_CONST (

3396585

)

'+abc'

]

5

ECHO OP1[

IS_TMP_VAR ~1

]

5

6

>

RETURN OP1[

IS_CONST (

0

)

1

]

7

*

>

ZEND_HANDLE_EXCEPTION

如果字符串中有很多變量。。。想想就覺得郁悶。

字符串連接

$a

=

"modify"

;

echo

"huarong@masalife.com"

.

$a

;

[

root@

masalife.com]

# /home/modify/test/bin/php -dvld.active=1 -dvld.execute=0 /tmp/aabi432o32.php

number of ops: 5

compiled vars: !

0

= $a

line # * op fetch ext return operands

---------------------------------------------------------------------------------

2

0

>

ASSIGN OP1[

IS_CV !

0

]

OP2[

, IS_CONST (

7277335

)

'modify'

]

3

1

CONCAT RES[

IS_TMP_VAR ~1

]

OP1[

IS_CONST (

7277018

)

'huarong%40masalife.com'

]

OP2[

, IS_CV !

0

]

2

ECHO OP1[

IS_TMP_VAR ~1

]

5

3

>

RETURN OP1[

IS_CONST (

0

)

1

]

4

*

>

ZEND_HANDLE_EXCEPTION

簡單了很多,字符串連接就是一個CONCAT,然后就ECHO了。

比起把變量放到字符串里面,字符串連接的速度更快啦。

關于這一點,在PHP文檔中也有提及:

Parsing variables within strings uses more memory than string concatenation.

When writing a PHP script in which memory usage is a concern,

consider using the concatenation operator (.) rather than variable parsing.

如果是多個字符串進行連接,如 echo “huarong@masalife.com “.$a.” abc”;

就會CONCAT多次:

number of ops: 6

compiled vars: !

= $a

line # * op fetch ext return operands

---------------------------------------------------------------------------------

2

0

>

ASSIGN OP1[

IS_CV !

0

]

OP2[

, IS_CONST (

6217291

)

'modify'

]

3

1

CONCAT RES[

IS_TMP_VAR ~1

]

OP1[

IS_CONST (

6216973

)

'huarong%40masalife.com+'

]

OP2[

, IS_CV !

0

]

2

CONCAT RES[

IS_TMP_VAR ~2

]

OP1[

IS_TMP_VAR ~1

]

OP2[

, IS_CONST (

6217296

)

'+abc'

]

3

ECHO OP1[

IS_TMP_VAR ~2

]

5

4

>

RETURN OP1[

IS_CONST (

0

)

1

]

5

*

>

ZEND_HANDLE_EXCEPTION

另外一種連接字符串的方式

使用逗號也可以的!

$a

=

"modify"

;

echo

"huarong@masalife.com"

,

$a

;

[

root@

masalife.com]

# /home/modify/test/bin/php -dvld.active=1 -dvld.execute=0 /tmp/aabi432o32.php

number of ops: 5

compiled vars: !

0

= $a

line # * op fetch ext return operands

---------------------------------------------------------------------------------

2

0

>

ASSIGN OP1[

IS_CV !

0

]

OP2[

, IS_CONST (

3686782

)

'modify'

]

3

1

ECHO OP1[

IS_CONST (

3686464

)

'huarong%40masalife.com'

]

2

ECHO OP1[

IS_CV !

0

]

5

3

>

RETURN OP1[

IS_CONST (

0

)

1

]

4

*

>

ZEND_HANDLE_EXCEPTION

可以看到,使用逗號連接字符串就相當于echo了多次。。。

不過逗號只有在echo的時候可以用,print就不支持它了。

由于它沒有用到CONCAT字符串操作,應該會更加節省內存。

總結

以上是生活随笔為你收集整理的php dvld.active 1,PHP的字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。