質問編集履歴
9
訂正
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
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -393,3 +393,5 @@
|
|
393
393
|
|
394
394
|
|
395
395
|
** ※teratailの質問は、上限が10000文字で追記できないので、他の調査メモは回答へ追記します。 **
|
396
|
+
|
397
|
+
** ※この質問をクリップしている方もいるため、調査メモを追記してきましたが、文字数制限で回答等にも記載し、読みにくいため、理解できたら記事をまとめてQiitaに投稿します。**
|
7
調査メモの追記
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
調査メモの追記
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
調査メモの追記
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
訂正
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
訂正
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
|
169
|
+
#【質問2】029DCEDCの意味は?
|
170
170
|
|
171
171
|
|
172
172
|
|
@@ -180,7 +180,7 @@
|
|
180
180
|
|
181
181
|
|
182
182
|
|
183
|
-
#質問3
|
183
|
+
#【質問3】* と ext の意味は?
|
184
184
|
|
185
185
|
|
186
186
|
|
@@ -194,7 +194,7 @@
|
|
194
194
|
|
195
195
|
|
196
196
|
|
197
|
-
#質問4
|
197
|
+
#【質問4】two-pass compiler
|
198
198
|
|
199
199
|
|
200
200
|
|
@@ -224,7 +224,7 @@
|
|
224
224
|
|
225
225
|
|
226
226
|
|
227
|
-
##質問4-1
|
227
|
+
###【質問4-1】two-pass compiler
|
228
228
|
|
229
229
|
|
230
230
|
|
@@ -240,7 +240,7 @@
|
|
240
240
|
|
241
241
|
|
242
242
|
|
243
|
-
##質問4-2
|
243
|
+
###【質問4-2】PHP5とPHP7での違いは?
|
244
244
|
|
245
245
|
|
246
246
|
|
2
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -224,7 +224,7 @@
|
|
224
224
|
|
225
225
|
|
226
226
|
|
227
|
-
##質問
|
227
|
+
##質問4-1 two-pass compiler
|
228
228
|
|
229
229
|
|
230
230
|
|
@@ -240,7 +240,7 @@
|
|
240
240
|
|
241
241
|
|
242
242
|
|
243
|
-
##質問
|
243
|
+
##質問4-2 PHP5とPHP7での違いは?
|
244
244
|
|
245
245
|
|
246
246
|
|
1
訂正
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
|
|