JIT时php8的重要功能之一,可以极大的提高性能;
JIT编译器集成在了Opcache插件中,仅在启动Opcache插件才有效
Opcache将 PHP 脚本编译后的字节码存储到内存中,以避免每次执行脚本时重新解析和编译,从而提高 PHP 应用程序的性能和响应速度。
php.ini文件

将zend_extension=opcache前面的‘;’号去掉,就相当于开启了opcache

opcache.enable=1;opcache.enable_cli=0;opcache.memory_consumption=128;
opcache.interned_strings_buffer=8;opcache.max_accelerated_files=10000这五个前面的;号也全部去除

再在opcache.max_accelerated_files=10000新增下面两段配置就可以了
- opcache.jit=tracing
- opcache.jit_buffer_size=100M
-
- $satrt = microtime(true);
- $total = 0;
- for($i = 0;$i<1000000;$i++){
- $total += $i;
- }
- echo "Count:".$i.",Total".$total."\n";
- $end = microtime(true);
-
- $spend = floor(($end - $satrt)*1000);
-
- echo $spend;
-
- ?>
开启前:

开启后:

集成环境为何无效?
php.ini配置文件修改失败,到集成环境页面的设置中打开php.ini配置文件
如何检测是否开启JIT?
echo "JIT is " . (ini_get('opcache.jit') ? "enabled" : "disabled") . "\n";
打印enabled表示开启成功;打印disabled表示开启失败
下面以PDO API为例
一般安装php环境会自带安装,可以通过phpinfo() 查看是否安装成功:
- echo phpinfo()
- ?>
然后打开页面查看:

第一个表明:PHP 环境中安装了 mysql 和 sqlite 两种 PDO 驱动程序,分别用于连接 MySQL 和 SQLite 数据库。
第二个表明:PHP 环境中采用的是 mysqlnd 客户端 API,其版本为 5.0.12-dev,这是一个 MySQL 连接管理器,它支持多种 MySQL 特性
- //数据库名
- $servername = "phpproj";
- //用户名
- $username = "root";
- //密码
- $password = "123456";
- //mysql:host=localhost =》本地连接
- $conn = new PDO("mysql:host=localhost;dbname=$servername",$username, $password);
- echo "连接成功
"; - //$stmt 变量通过使用 $conn 对象的 prepare() 方法,使用 SQL 查询字符串 "select * from usertext" 准备一个 SQL 语句对象
- $stmt = $conn->prepare('select * from usertext');
- //$stmt 对象的 execute() 方法用于执行准备好的 SQL 语句,并将查询结果存储到当前的 $stmt 对象中
- $stmt -> execute();
- //fetchAll() 方法将从结果集中检索所有行,并返回包含结果集中所有行的数组。
- $arr = $stmt -> fetchAll();
- //var_dump() 函数输出 $arr 变量
- var_dump($arr);
- ?>


如何返回数据遇到乱码,如何处理?
- //在运行sql语句下增加下面一行代码
- $conn -> query('SET NAMES utf8');
- //作用:执行的是 "SET NAMES utf8" 这个查询,该查询用于设置 MySQL 连接的字符集为 utf8,以便支持存储和检索 Unicode 字符。
- $host = "localhost";
- $servername = "phpproj";
- $username = "root";
- $password = "123456";
-
- try {
- $pdo = new PDO("mysql:host=$host;dbname=$servername;charset=utf8", $username, $password);
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- } catch (PDOException $e) {
- die("Error: " . $e->getMessage());
- }
新增一条数据
-
- XXXXXXXXXXXXXXX
-
- // 新增数据
- $sql1 = "INSERT INTO usertext (name, age, signature,id) VALUES ('Tom', 22, '坚持就是胜利',5)";
- //使用PDO的exec()方法执行SQL语句,并返回受影响的行数。在这里,由于只插入了一条数据,因此返回的值为1
- $pdo->exec($sql1);

新增多条
-
- XXXXXXXXXXXXXXXXXX
-
- // 批量新增数据 以问号(?)的形式占位
- $sql2 = "INSERT INTO usertext (name, age, signature,id) VALUES (?, ?, ?,?)";
- // prepare()方法创建一个预处理语句对象,将SQL语句作为参数传入
- $stmt = $pdo->prepare($sql2);
- $data = array(
- array("Jack", 25, "male",6),
- array("Lucy", 23, "female",7),
- array("Mike", 21, "male",8)
- );
- // count() 用于统计数组元素的个数(即数组长度)
- for ($i = 0; $i < count($data); $i++) {
- // execute()用于执行已经准备好的SQL语句。通常与prepare()方法一起使用
- $stmt->execute($data[$i]);
- }

-
- XXXXXXXXXXXXXXXXX
-
- // 删除数据
- $sql3 = "DELETE FROM users WHERE name='Tom'";
- $pdo->exec($sql3);
-
- XXXXXXXXXXXXXX
-
- // 修改数据
- $sql4 = "UPDATE usertext SET signature='闪电五连鞭' WHERE name='Lucy'";
- $pdo->exec($sql4);

-
- XXXXXXXXXXXXXXXXXXXXXXXxx
-
- // 查询数据
- $sql5 = "SELECT * FROM usertext WHERE age>22 ORDER BY age ASC";
- $stmt = $pdo->query($sql5);
- // fetchAll()方法会从数据库查询结果集中获取所有行,并将它们保存为一个关联数组
- $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
- foreach ($results as $row) {
- echo "姓名: " . $row['name'] . ", 年龄: " . $row['age'] . ", 签名: " . $row['signature'] . "
"; - }
