質問編集履歴

9

訂正

2016/11/10 04:36

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -376,7 +376,7 @@
376
376
 
377
377
 
378
378
 
379
- 一般的なソフトも未保存のファイルに * が付くのでGoogle先生の解釈で概ね間違ない気がします。
379
+ 一般的なソフトも未保存のファイルに * が付くのでGoogle先生の解釈で概ね間違ない気がします。
380
380
 
381
381
 
382
382
 

8

追記

2016/11/10 04:36

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -393,3 +393,5 @@
393
393
 
394
394
 
395
395
  ** ※teratailの質問は、上限が10000文字で追記できないので、他の調査メモは回答へ追記します。 **
396
+
397
+ ** ※この質問をクリップしている方もいるため、調査メモを追記してきましたが、文字数制限で回答等にも記載し、読みにくいため、理解できたら記事をまとめてQiitaに投稿します。**

7

調査メモの追記

2016/11/10 04:24

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -389,3 +389,7 @@
389
389
 
390
390
 
391
391
  基本的に op_array に格納されるようですが、英語読めないのでどのタイミングでいつ削除されるのかなど肝心なところが全くわかりません^^;
392
+
393
+
394
+
395
+ ** ※teratailの質問は、上限が10000文字で追記できないので、他の調査メモは回答へ追記します。 **

6

調査メモの追記

2016/11/10 04:11

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -351,3 +351,41 @@
351
351
  ただ、extended_value が現時点で何なのかよくわかってません^^;
352
352
 
353
353
  参考になるものを見つけたら追記します。
354
+
355
+
356
+
357
+ #### ダンプした * について
358
+
359
+
360
+
361
+ [More source analysis with VLD](https://derickrethans.nl/more-source-analysis-with-vld.html) に下記の記述があります。
362
+
363
+
364
+
365
+ > Every opcode that has a * after the number (like in 5*) is code that can not be reached, and can possibly be eliminated from the oparrays in an optimiser.
366
+
367
+
368
+
369
+ 英語読めないので、Google先生に頼ると到達できていないコードのようです。
370
+
371
+
372
+
373
+ > 番号の後に*(5 *のように)があるすべてのオペコードは、到達できないコードであり、オプティマイザのoparraysから削除される可能性があります。
374
+
375
+
376
+
377
+
378
+
379
+ 一般的なソフトも未保存のファイルに * が付くのでGoogle先生の解釈で概ね間違えない気がします。
380
+
381
+
382
+
383
+ op_arrayに関しては [PHP による hello world 入門](http://tech.respect-pal.jp/php-helloworld/) に下記の説明があります。
384
+
385
+
386
+
387
+ > PHP ソースコードのバイトコードへのコンパイル結果は、関数ごと別々の配列へ格納されます。コンパイル結果の命令列を保持する配列は op_array と呼ばれています。phpdbg の print 命令はこの op_array の内容をダンプするものです。
388
+
389
+
390
+
391
+ 基本的に op_array に格納されるようですが、英語読めないのでどのタイミングでいつ削除されるのかなど肝心なところが全くわかりません^^;

5

調査メモの追記

2016/11/09 12:39

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -283,3 +283,71 @@
283
283
  - [PHP 5.5ネーティブキャッシュの話](http://www.slideshare.net/hirokawa/php-55-26227359)
284
284
 
285
285
  - [Zend OPcacheの速さの秘密を探る](http://www.slideshare.net/hnw/zend-opcache)
286
+
287
+
288
+
289
+ #【追記】調査メモ
290
+
291
+
292
+
293
+ 質問後に調査した結果をここにフィードバックします。
294
+
295
+ C言語も英語も読めない未熟者ですので、私の調査結果は信憑性に欠けると思います。
296
+
297
+ そのときは、ご指摘くださいm(__)m
298
+
299
+
300
+
301
+ #### ダンプした ext について
302
+
303
+
304
+
305
+ vld の表示は [zend_compile.h](https://github.com/php/php-src/blob/c71ab7260a05f3f167f51444060406b9e23ede5b/Zend/zend_compile.h) の下記の箇所をダンプしているはずです。
306
+
307
+
308
+
309
+ ```
310
+
311
+ struct _zend_op {
312
+
313
+ const void *handler;
314
+
315
+ znode_op op1;
316
+
317
+ znode_op op2;
318
+
319
+ znode_op result;
320
+
321
+ uint32_t extended_value;
322
+
323
+ uint32_t lineno;
324
+
325
+ zend_uchar opcode;
326
+
327
+ zend_uchar op1_type;
328
+
329
+ zend_uchar op2_type;
330
+
331
+ zend_uchar result_type;
332
+
333
+ };
334
+
335
+ ```
336
+
337
+
338
+
339
+ ext という項目は `uint32_t extended_value;` に該当するかと思います。
340
+
341
+ `extended_value` というワードで調べたら [PHP による hello world 入門](http://tech.respect-pal.jp/php-helloworld/) に下記の説明がありました。
342
+
343
+
344
+
345
+ > ZEND_INCLUDE_OR_EVAL 命令は名前の通り include / require の他に eval にも対応しているのですが、命令列のダンプ結果にはこれらを区別する情報がないのを不思議に思うかもしれません。これは phpdbg の問題です。実際には一部の命令は、2 つのオペランドの他に extended_value というデータをとる場合があり、PHP 5.6 の phpdbg は ZEND_INCLUDE_OR_EVAL 命令の extended_value の表示に対応していないようです。vld だと extended_value での違いもちゃんと表示してくれます。
346
+
347
+
348
+
349
+ zend_opに関して [Phpをいじり倒す10の方法](http://sssslide.com/www.slideshare.net/moriyoshi/php10#21) に説明がありました。
350
+
351
+ ただ、extended_value が現時点で何なのかよくわかってません^^;
352
+
353
+ 参考になるものを見つけたら追記します。

4

訂正

2016/11/09 12:22

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -170,7 +170,7 @@
170
170
 
171
171
 
172
172
 
173
- オペコードのoperandsに `%00%7Bclosure%7DC%3A%5Cxampp%5Chtdocs%5Cfunc1.php029DCEDC` とあります。
173
+ ダンプしたオペコードのoperandsに `%00%7Bclosure%7DC%3A%5Cxampp%5Chtdocs%5Cfunc1.php029DCEDC` とあります。
174
174
 
175
175
  パーセントエンコーディングのため一つ一つ変換すると `NULL{closure}C:\xampp\htdocs\unc1.php029DCEDC`になるかと存じます。
176
176
 

3

訂正

2016/11/08 04:03

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -140,7 +140,7 @@
140
140
 
141
141
 
142
142
 
143
- #質問1 「ローカル変数」「一時的な変数」「一時的ではない変数」の違いは?
143
+ #質問1「ローカル変数」「一時的な変数」「一時的ではない変数」の違いは?
144
144
 
145
145
 
146
146
 
@@ -166,7 +166,7 @@
166
166
 
167
167
 
168
168
 
169
- #質問2 029DCEDCの意味は?
169
+ #質問2029DCEDCの意味は?
170
170
 
171
171
 
172
172
 
@@ -180,7 +180,7 @@
180
180
 
181
181
 
182
182
 
183
- #質問3 * と ext の意味は?
183
+ #質問3* と ext の意味は?
184
184
 
185
185
 
186
186
 
@@ -194,7 +194,7 @@
194
194
 
195
195
 
196
196
 
197
- #質問4 two-pass compiler
197
+ #質問4two-pass compiler
198
198
 
199
199
 
200
200
 
@@ -224,7 +224,7 @@
224
224
 
225
225
 
226
226
 
227
- ##質問4-1 two-pass compiler
227
+ ###【質問4-1two-pass compiler
228
228
 
229
229
 
230
230
 
@@ -240,7 +240,7 @@
240
240
 
241
241
 
242
242
 
243
- ##質問4-2 PHP5とPHP7での違いは?
243
+ ###【質問4-2PHP5とPHP7での違いは?
244
244
 
245
245
 
246
246
 

2

訂正

2016/11/08 04:01

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -224,7 +224,7 @@
224
224
 
225
225
 
226
226
 
227
- ##質問3-1 two-pass compiler
227
+ ##質問4-1 two-pass compiler
228
228
 
229
229
 
230
230
 
@@ -240,7 +240,7 @@
240
240
 
241
241
 
242
242
 
243
- ##質問3-2 PHP5とPHP7での違いは?
243
+ ##質問4-2 PHP5とPHP7での違いは?
244
244
 
245
245
 
246
246
 

1

訂正

2016/11/08 03:57

投稿

7968
7968

スコア253

test CHANGED
File without changes
test CHANGED
@@ -158,7 +158,11 @@
158
158
 
159
159
 
160
160
 
161
- 「ローカル変数」「一時的な変数」「一時的ではない変数」の違いは、何でしょうか?
161
+ 「ローカル変数」「一時的な変数」「一時的ではない変数」はどような変数のことなのでしょうか?
162
+
163
+
164
+
165
+ 推測ですが、「ローカル変数」は、関数内に記述した変数のことで、「一時的な変数」は静的変数のことなのかなという感じですが、「一時的ではない変数」については皆目検討もつきません。
162
166
 
163
167
 
164
168