深入理解PHP原理之执行周期分析,深入理解php_PHP教程
深入理解PHP原理之执行周期分析,深入理解php
本文讲述了PHP原理之执行周期。分享给大家供大家参考,具体如下:
PHP的执行周期,从最初我们编写的PHP脚本->到最后脚本被执行->得到执行结果,这个过程,其实可以分为如下几个阶段:
首先,Zend Engine(ZE),调用词法分析 器(Lex生成的,源文件在 Zend/zend_language_sanner.l), 将我们要执行的PHP源文件,去掉空格 ,注释,分割成一个一个的token。
然后,ZE会将得到的token forward给语法分析 器(yacc生成, 源文件在 Zend/zend_language_parser.y),生成一个一个的opcode,opcode一般会以op array的形式存在,它是PHP执行的中间语言。
最后,ZE调用zend_executor来执行op array ,输出结果。(也就是将源文件转换成机器语言,然后在虚拟机上运行它。)
ZE是一个虚拟机,正是由于它的存在,所以才能使得我们写PHP脚本,完全不需要考虑所在的操作系统类型是什么,这才是PHP的可移植性的原因。ZE是一个CISC(复杂指令处理器),它支持150条指令(具体指令在 Zend/zend_vm_opcodes.h),包括从最简单的ZEND_ECHO(echo)到复杂的 ZEND_INCLUDE_OR_EVAL(include,require),所有我们编写的PHP都会最终被处理为这150条指令(op code)的序列,从而最终被执行。
PHP是一个脚本语言,也就是说,用户编写的PHP代码最终都是会被PHP解释器解释执行,所有编写的PHP代码,都会被翻译成PHP的虚拟机ZE的虚拟指令(OPCODES)来执行。
那我们的PHP脚本,最终被“翻译"成什么样的呢? 也就是说,op code长的什么样子呢? Opcode是一种PHP脚本编译后的中间语言。
在PECL中已经有这样的模块,利用由 Derick Rethans开发的VLD (Vulcan Logic Dissassembler)模块。你只要下载这个模块,并把他载入PHP中,就可以通过简单的设置,来得到脚本翻译的结果了。
VLD模块的安装以及应用:
[root@localhost software]# tar zxvf vld-0.9.1.tgz.gz [root@localhost vld-0.9.1]# /usr/local/php/bin/phpize [root@localhost vld-0.9.1]# ./configure --with-php-config=/usr/local/php/bin/php-config [root@localhost vld-0.9.1]# make install //不需要make
编辑php.ini文件并激活vld扩展。
实例:
创建一个文件,如:hello.php
<?php echo 'hello, world.'; ?>
执行:
[root@localhost html]# /usr/local/php/bin/php -dvld.active=1 hello.php Branch analysis from position: 0 Return found filename: /var/www/html/hello.php function name: (null) number of ops: 3 compiled vars: none line # op fetch ext return operands ------------------------------------------------------------------------------- 2 0 ECHO 'hello%2C+world.' 4 1 RETURN 1 2* ZEND_HANDLE_EXCEPTION hello, world.
看另一个:
[root@localhost html]# vi vld.php <?php $i = "This is a string"; //I am comments echo $i. ' that has been echoed on screen'; ?>
执行:
[root@localhost html]# /usr/local/php/bin/php -dvld.active=1 vld.php Branch analysis from position: 0 Return found filename: /var/www/html/vld.php function name: (null) number of ops: 5 compiled vars: !0 = $i line # op fetch ext return operands ------------------------------------------------------------------------------- 3 0 ASSIGN !0, 'This+is+a+string' 7 1 CONCAT ~1 !0, '+that+has+been+echoed+on+screen' 2 ECHO ~1 10 3 RETURN 1 4* ZEND_HANDLE_EXCEPTION This is a string that has been echoed on screen
注:ZEND_HANDLE_EXCEPTION 就是 Zend/zend_vm_opcodes.h 中第149条指令
compiled vars: !0 = $i 此处是获取变量名"i"的变量于!0(*zval)。
#0 将字符串"this+is+a+string"赋值(ASSIGN)给!0
#1 字符串连接
#2 显示
这些中间代码会被Zend VM(Zend虚拟机)直接执行。真正负责执行的函数是:zend_execute(zend_execute.h)。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数学运算技巧总结》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Masalah ditemui dalam masa tamat masa pengeluaran projek springboot Masalahnya diterangkan di bawah: Dalam persekitaran ujian, sesi keluar telah dikonfigurasikan dengan menukar aplikasi.yaml Selepas menetapkan masa yang berbeza untuk mengesahkan bahawa konfigurasi keluar sesi berkuat kuasa, masa tamat tempoh ditetapkan terus kepada 8 jam untuk dilepaskan. Walau bagaimanapun, saya menerima maklum balas daripada pelanggan pada waktu tengah hari bahawa masa tamat projek ditetapkan menjadi singkat Jika tiada operasi dilakukan selama setengah jam, sesi akan tamat tempoh dan memerlukan log masuk berulang. Selesaikan masalah pengendalian persekitaran pembangunan: projek springboot mempunyai Tomcat terbina dalam, jadi sesi keluar yang dikonfigurasikan dalam application.yaml dalam projek adalah berkesan. Persekitaran pengeluaran: Keluaran persekitaran pengeluaran ialah

Kegagalan sesi biasanya disebabkan oleh tamat tempoh seumur hidup sesi atau penutupan pelayan. Penyelesaian: 1. Memanjangkan hayat sesi; 2. Gunakan storan berterusan;

Penyelesaian kepada masalah silang domain PHPSession Dalam pembangunan pemisahan front-end dan back-end, permintaan merentas domain telah menjadi kebiasaan. Apabila menangani isu merentas domain, kami biasanya melibatkan penggunaan dan pengurusan sesi. Walau bagaimanapun, disebabkan oleh sekatan dasar asal penyemak imbas, sesi tidak boleh dikongsi secara lalai merentas domain. Untuk menyelesaikan masalah ini, kita perlu menggunakan beberapa teknik dan kaedah untuk mencapai perkongsian sesi merentas domain. 1. Penggunaan kuki yang paling biasa untuk berkongsi sesi merentas domain

Penyelesaian kepada masalah bahawa sesi php hilang selepas menyegarkan: 1. Buka sesi melalui "session_start();" 2. Tulis semua konfigurasi awam dalam fail php 3. Nama pembolehubah tidak boleh sama dengan subskrip tatasusunan; 4. Dalam Hanya semak laluan penyimpanan data sesi dalam phpinfo dan semak sama ada sesio dalam direktori fail berjaya disimpan.

Masa tamat lalai PHP sesi ialah 1440 saat, iaitu 24 minit, yang bermaksud bahawa jika pelanggan tidak memuat semula selama lebih daripada 24 minit, sesi semasa akan tamat tempoh jika pengguna menutup penyemak imbas, sesi akan tamat dan Sesi tidak akan wujud lagi.

Masalah: Hari ini, kami menghadapi masalah tamat masa tetapan dalam projek kami dan perubahan pada application.properties SpringBoot2 tidak pernah berkuat kuasa. Penyelesaian: Pelayan.* sifat digunakan untuk mengawal bekas terbenam yang digunakan oleh SpringBoot. SpringBoot akan mencipta contoh bekas servlet menggunakan salah satu contoh ServletWebServerFactory. Kelas ini menggunakan sifat pelayan.* untuk mengkonfigurasi bekas servlet terkawal (tomcat, jeti, dsb.). Apabila aplikasi digunakan sebagai fail perang kepada contoh Tomcat, pelayan.* sifat tidak digunakan. Mereka tidak memohon,

1. Melaksanakan log masuk SMS berdasarkan sesi 1.1 Carta alir log masuk SMS 1.2 Melaksanakan penghantaran kod pengesahan SMS Perihalan permintaan hujung hadapan: Penerangan kaedah permintaan POST laluan permintaan/pengguna/kod parameter permintaan telefon (nombor telefon) nilai pulangan Tiada antara muka belakang pelaksanaan: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){/1

JavaScriptCookies Menggunakan kuki JavaScript ialah cara paling berkesan untuk mengingati dan menjejaki keutamaan, pembelian, komisen dan maklumat lain. Maklumat diperlukan untuk pengalaman pelawat yang lebih baik atau statistik tapak web. PHPCookieCookies ialah fail teks yang disimpan pada komputer pelanggan dan disimpan untuk tujuan penjejakan. PHP secara telus menyokong kuki HTTP. Bagaimanakah kuki JavaScript berfungsi? Pelayan anda menghantar beberapa data ke penyemak imbas pelawat anda dalam bentuk kuki. Pelayar boleh menerima kuki. Jika ada, ia akan disimpan pada pemacu keras pelawat sebagai rekod teks biasa. Sekarang, apabila pelawat mencapai halaman lain di tapak
