书香隽秀 - 记录php5.3升级到php7.4的改动
type: channel
link: https://www.huangshuxiu.com/%E8%AE%B0%E5%BD%95php5-3%E5%8D%87%E7%BA%A7%E5%88%B0php7-4%E7%9A%84%E6%94%B9%E5%8A%A8/
items: PHP 依赖管理神器 Composer
items: php session_start(): Failed to read session data: user (path:XXX)

PHP 依赖管理神器 Composer
type: item
date: 2023-05-10T16:38:53+08:00
description: Composer 是什么？Composer 是一个 PHP 包管理的系统，现在越来越多的 PHP 使用 Composer 来管理包。比如 FastAdmin、 ThinkPHP、Laravel 等都是用 Composer 进行 php 包的管理。安装Windows Installer这是将 Composer 安装在你机器上的最简单的方法。下载并且运行 Composer-Setup.exe，它将安装最新版本的 Composer ，并设置好系统的环境变量，因此你可以在任何目录下直接使用 composer 命令。配置中国镜像修改 composer 的全局配置文件（推荐方式）打开命令行窗口（windows用户）或控制台（Linux、Mac 用户）并执行如下命令composer config -g repo.packagist composer https://packagist.phpcomposer.com镜像列表国内也很多开发者使用 Composer，但由于不可控因素，官方的服务器常常连接不上。所以这里收集了一下国内镜像列表。（先后次序会不定期调整）镜像名地址赞助商/地区阿里云 Composer 镜像https://mirrors.aliyun.com/composer/阿里云腾讯云 Composer 镜像https://mirrors.cloud.tencent.com/composer/腾讯云PHP 国内 Composer 镜像https://packagist.phpcomposer.com 华为云 Composer 镜像https://repo.huaweicloud.com/repository/php/华为云解除镜象如果需要解除镜像并恢复到 packagist 官方源，请执行以下命令composer config -g --unset repos.packagist基本使用查看帮助composer require -h创建一个项目composer create-project 公司名/项目名 项目路径/* 创建 laravel 项目 */ composer create-project laravel/laravel=5.5.* ./laravel /* 创建 ThinkPHP 项目 */ composer create-project topthink/ThinkPHP=5.1.* ./tp5查找可安装的包到官方包管理网站搜索https://packagist.org 或者 composer search 包名composer search laravel下载/更新# 下载安装，当项目有composer.json时，但是还没有vendor目录时使用 composer install # 更新 composer update # 更新指定包 composer update monolog/monolog安装一个包composer require 包名 版本composer require laravel/laravel ">=5.5"移除一个包composer remove 包名composer remove laravel/laravel升级 composercomposer self-update查看配置composer config -gl指定php版本不同版本的php兼容性不一样，比如php8.0以上的就不支持一下语法，这时我们需要安装多个版本的php，当然在执行compsoer时也需要设置不同的版本。# 部分项目会需要指定php版本运行 /usr/bin/php73 /usr/local/bin/composer create-project laravel/laravel自动加载Composer 还准备了一个自动加载文件，它可以加载 Composer 下载的库中所有的类文件。你只需要将下面这行代码添加到你项目的引导文件中，或者某些旧框架没有使用 composer ，可以在类中单独引入，之后该文件就可以使用composer加载的包<?php …… require 'vendor/autoload.php';composer.json 架构只要你有一个 composer.json 文件在目录中，那么整个目录就是一个包。当你添加一个 require 到项目中，你就是在创建一个依赖于其它库的包。你的项目和库之间唯一的区别是，你的项目是一个没有名字的包。{ "name": "topthink/framework", "description": "The ThinkPHP Framework.", "type": "project", "keywords": [ "framework", "thinkphp", "O…

php session_start(): Failed to read session data: user (path:XXX)
type: item
date: 2023-05-09T09:16:00+08:00
description: 当我们想用数据库来存储session时，可调用session_set_save_handler()函数，把session对应的不同方法的实现封装进去，但是在封装完之后，进行调用时，有可能发生 warning：session_start(): Failed to read session data: user (path:XXX) ，由于在网上没法找到对应的解决办法，博主查了一下PHP手册，发现问题出在session_set_save_handler()的第三个参数read回调函数上。手册原文：通过 read 回调函数返回的现有会话数据（使用特殊的序列化格式存储）， PHP 会自动反序列化数据并且填充 $_SESSION 超级全局变量。如果会话中有数据，read 回调函数必须返回将会话数据编码（序列化）后的字符串。 如果会话中没有数据，read 回调函数返回空字符串。所以，在read()方法的实现时，如果返回的数据库查询结果是数组的形式，要对其进行序列化操作；如果返回的数据查询为空则返回空字符串；博主就在read()方法的return $result; 改成return serialize($result);