人间一铺后台系统
  • Ubuntu 22
    • Ufw 配置防火墙
    • Lnmp 多版本PHP
    • Nginx 安装及配置
    • Mysql 安装及配置
    • Php 安装及配置
    • Redis 安装及配置
    • Svn 安装及配置
    • Frp 安装及配置
    • OpenVPN 安装及配置

搜索结果

没有相关内容~~

Php 安装及配置

最新修改于 2025-12-26 09:54
## 安装 PHP ### 1. 安装不同版本的 PHP #### 方法一:安装默认版本 ```bash # 更新包列表 sudo apt update # 安装 PHP(Ubuntu 22.04 默认是 PHP 8.1) sudo apt install php ``` #### 方法二:安装特定版本 ```bash # 添加第三方仓库(支持多个PHP版本) sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update # 安装 PHP 8.2 sudo apt install php8.2 # 安装 PHP 8.1 sudo apt install php8.1 # 安装 PHP 7.4(旧版支持) sudo apt install php7.4 # 安装 PHP 8.3(最新版) sudo apt install php8.3 ``` #### 方法三:同时安装多个 PHP 版本 ```bash # 安装多个版本 sudo apt install php8.2 php8.1 php7.4 # 查看已安装的 PHP 版本 update-alternatives --list php # 切换默认 PHP 版本 sudo update-alternatives --set php /usr/bin/php8.2 sudo update-alternatives --set php /usr/bin/php8.1 ``` ### 2. 安装 PHP 扩展 #### 常用扩展包 ```bash # 基础扩展 sudo apt install php-common php-cli php-fpm php-json php-mysql # 开发相关 sudo apt install php-dev php-pear phpunit # 数据库扩展 sudo apt install php-pgsql php-sqlite3 php-mongodb php-redis # 图像处理 sudo apt install php-gd php-imagick # XML 处理 sudo apt install php-xml php-xmlrpc php-soap # 字符串和多字节支持 sudo apt install php-mbstring php-bcmath # 加密和安全 sudo apt install php-curl php-openssl php-hash # 压缩和归档 sudo apt install php-zip php-bz2 # 缓存和性能 sudo apt install php-apcu php-memcached php-opcache # 国际化 sudo apt install php-intl # 日期和时间 sudo apt install php-date # 邮件 sudo apt install php-mail php-mailparse ``` #### 安装特定版本的扩展 ```bash # PHP 8.2 扩展 sudo apt install php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip # PHP 8.1 扩展 sudo apt install php8.1-mysql php8.1-curl php8.1-gd ``` ### 3. 安装 PHP-FPM(FastCGI 进程管理器) ```bash # 安装 PHP-FPM sudo apt install php-fpm # 安装特定版本的 PHP-FPM sudo apt install php8.2-fpm php8.1-fpm php7.4-fpm # 管理 PHP-FPM 服务 sudo systemctl status php8.2-fpm sudo systemctl start php8.2-fpm sudo systemctl restart php8.2-fpm sudo systemctl stop php8.2-fpm sudo systemctl enable php8.2-fpm ``` ## PHP 配置 ### 1. 配置文件位置 ```bash # 主配置文件 /etc/php/{version}/php.ini # 例如: /etc/php/8.2/cli/php.ini # CLI 配置 /etc/php/8.2/fpm/php.ini # FPM 配置 /etc/php/8.2/apache2/php.ini # Apache 配置 # PHP-FPM 配置文件 /etc/php/{version}/fpm/php-fpm.conf /etc/php/{version}/fpm/pool.d/www.conf # 配置目录结构 /etc/php/8.2/ ├── cli/ │ ├── php.ini │ └── conf.d/ ├── fpm/ │ ├── php-fpm.conf │ ├── php.ini │ └── pool.d/ └── mods-available/ ``` ### 2. 常用配置修改 ```bash # 编辑配置文件 sudo nano /etc/php/8.2/fpm/php.ini sudo nano /etc/php/8.2/cli/php.ini ``` #### 主要配置项: ```ini ; 错误报告 error_reporting = E_ALL display_errors = On ; 开发环境 display_errors = Off ; 生产环境 log_errors = On error_log = /var/log/php_error.log ; 时区设置 date.timezone = Asia/Shanghai ; 上传文件大小限制 upload_max_filesize = 20M post_max_size = 20M ; 内存限制 memory_limit = 256M ; 执行时间 max_execution_time = 30 max_input_time = 60 ; 输出缓冲 output_buffering = Off ; 会话配置 session.save_handler = files session.save_path = /var/lib/php/sessions session.gc_maxlifetime = 1440 ; OPCache 优化 opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2 opcache.fast_shutdown=1 ; 安全配置 expose_php = Off ; 隐藏 PHP 版本信息 disable_functions = exec,system,passthru,shell_exec cgi.fix_pathinfo=0 ; 安全修复 ``` ### 3. PHP-FPM 进程池配置 ```bash sudo nano /etc/php/8.2/fpm/pool.d/www.conf ``` 配置示例: ```ini [www] user = www-data group = www-data ; 监听方式 listen = /run/php/php8.2-fpm.sock ; Unix Socket ; listen = 127.0.0.1:9000 ; TCP Socket listen.owner = www-data listen.group = www-data listen.mode = 0660 ; 进程管理 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10 pm.max_requests = 500 ; 请求超时 request_terminate_timeout = 30s request_slowlog_timeout = 5s slowlog = /var/log/php8.2-fpm-slow.log ; 环境变量 env[HOSTNAME] = $HOSTNAME env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp ; 安全限制 security.limit_extensions = .php .php3 .php4 .php5 php_admin_value[disable_functions] = exec,system php_admin_flag[log_errors] = on ``` ## PHP 与 Web 服务器集成 ### 1. PHP 与 Nginx 配置 ```nginx # Nginx 站点配置 server { listen 80; server_name example.com; root /var/www/html; index index.php index.html index.htm; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # 超时设置 fastcgi_read_timeout 300; } location ~ /\.ht { deny all; } } ``` ## 开发环境配置 ### 1. Composer 安装 ```bash # 下载 Composer curl -sS https://getcomposer.org/installer | php # 移动到全局目录 sudo mv composer.phar /usr/local/bin/composer # 创建软链接 sudo ln -s /usr/local/bin/composer /usr/bin/composer # 验证安装 composer --version # 配置中国镜像 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ # 更新 Composer composer self-update ``` ### 2. Xdebug 安装和配置 ```bash # 安装 Xdebug sudo apt install php8.2-xdebug # 编辑 Xdebug 配置 sudo nano /etc/php/8.2/mods-available/xdebug.ini ``` Xdebug 配置: ```ini zend_extension=xdebug.so xdebug.mode=debug,develop,coverage xdebug.client_host=127.0.0.1 xdebug.client_port=9003 xdebug.start_with_request=yes xdebug.idekey=VSCODE xdebug.log=/var/log/xdebug.log xdebug.log_level=7 ``` ### 3. 安装其他开发工具 ```bash # PHP CodeSniffer(代码规范检查) composer global require "squizlabs/php_codesniffer=*" # PHPStan(静态分析) composer global require phpstan/phpstan # PHPUnit(单元测试) sudo apt install phpunit # 或使用 Composer composer require --dev phpunit/phpunit # PHP_CodeCoverage composer require --dev phpunit/php-code-coverage # PHP Mess Detector composer global require phpmd/phpmd # Psalm(静态分析) composer global require vimeo/psalm ``` ## 性能优化 ### 1. OPcache 优化 ```ini ; /etc/php/8.2/fpm/conf.d/10-opcache.ini opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=20000 opcache.revalidate_freq=2 opcache.fast_shutdown=1 opcache.enable_cli=1 opcache.jit_buffer_size=256M opcache.jit=1255 ``` ### 2. 调整 PHP-FPM 进程设置 ```ini pm = dynamic pm.max_children = 50 # 根据内存调整:(内存 - 系统占用) / 单个进程内存 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10 pm.process_idle_timeout = 10s pm.max_requests = 1000 # 防止内存泄漏 ``` ### 3. 启用 Zend JIT(PHP 8+) ```ini opcache.jit_buffer_size=256M opcache.jit=tracing ``` ## 调试和错误处理 ### 1. 错误日志配置 ```bash # 创建错误日志目录 sudo mkdir -p /var/log/php sudo chown www-data:www-data /var/log/php # 配置错误日志 sudo nano /etc/php/8.2/fpm/php.ini ``` ```ini log_errors = On error_log = /var/log/php/php_errors.log error_reporting = E_ALL display_errors = Off ; 生产环境 display_errors = On ; 开发环境 ``` ### 2. 查看日志 ```bash # PHP 错误日志 sudo tail -f /var/log/php/php_errors.log # PHP-FPM 日志 sudo tail -f /var/log/php8.2-fpm.log # Nginx/Apache 错误日志 sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/apache2/error.log # 慢日志 sudo tail -f /var/log/php8.2-fpm-slow.log ``` ### 3. 调试函数 ```php <?php // 调试输出 var_dump($variable); print_r($variable); // 带回溯信息的调试 debug_print_backtrace(); // 获取所有定义函数 get_defined_functions(); // 获取所有定义类 get_declared_classes(); // 获取包含文件 get_included_files(); // 内存使用 echo memory_get_usage() . "\n"; echo memory_get_peak_usage() . "\n"; // 执行时间 $start = microtime(true); // 你的代码 $end = microtime(true); echo "执行时间: " . ($end - $start) . "秒\n"; ?> ``` ## 安全管理 ### 1. 安全配置建议 ```ini ; 禁用危险函数 disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source ; 禁用危险类 disable_classes = ; 限制文件打开 open_basedir = /var/www/html ; 限制文件上传 file_uploads = On upload_max_filesize = 10M max_file_uploads = 20 ; 防止 SQL 注入 magic_quotes_gpc = Off ; 防止跨站脚本 session.cookie_httponly = 1 session.use_only_cookies = 1 session.cookie_secure = 1 ; 限制远程文件包含 allow_url_fopen = Off allow_url_include = Off ``` ### 2. 安全扫描工具 ```bash # 安装安全扫描工具 composer global require enlightn/security-checker composer global require roave/security-advisories:dev-latest # 检查依赖中的安全漏洞 composer update --dry-run roave/security-advisories security-checker security:check # PHP 恶意软件扫描 git clone https://github.com/marcocesarato/PHP-Antimalware-Scanner.git php scanner.php --path=/var/www/html ``` ## 监控和调优 ### 1. PHP 状态页面 ```nginx # Nginx 配置 location /php-status { fastcgi_pass unix:/run/php/php8.2-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; access_log off; allow 127.0.0.1; deny all; } ``` 访问 `http://localhost/php-status` 查看 PHP-FPM 状态。 ### 2. 性能监控脚本 ```php <?php // status.php - PHP 状态监控页面 header('Content-Type: text/plain'); echo "PHP Version: " . phpversion() . "\n\n"; echo "Memory Usage: " . memory_get_usage() . " bytes\n"; echo "Peak Memory Usage: " . memory_get_peak_usage() . " bytes\n\n"; echo "Extensions loaded:\n"; print_r(get_loaded_extensions()); echo "\n\nPHP Information:\n"; ob_start(); phpinfo(); $phpinfo = ob_get_clean(); echo $phpinfo; echo "\n\nEnvironment Variables:\n"; print_r($_SERVER); ?> ``` ## 常见问题解决 ### 1. 权限问题 ```bash # 修复文件和目录权限 sudo chown -R www-data:www-data /var/www/html sudo find /var/www/html -type d -exec chmod 755 {} \; sudo find /var/www/html -type f -exec chmod 644 {} \; # 修复会话目录权限 sudo chown -R www-data:www-data /var/lib/php/sessions sudo chmod 733 /var/lib/php/sessions ``` ### 2. 扩展未加载 ```bash # 检查扩展是否启用 php -m | grep extension_name # 启用扩展 sudo phpenmod extension_name # 禁用扩展 sudo phpdismod extension_name # 重新加载 PHP-FPM sudo systemctl reload php8.2-fpm ``` ### 3. 性能问题排查 ```bash # 检查慢查询日志 sudo tail -f /var/log/php8.2-fpm-slow.log # 监控 PHP-FPM 状态 sudo systemctl status php8.2-fpm # 查看 PHP 进程 ps aux | grep php top -p $(pgrep -d',' php-fpm) # 查看连接数 sudo netstat -anp | grep php-fpm ``` ### 4. 500 内部错误 ```bash # 查看错误日志 sudo tail -f /var/log/php/php_errors.log sudo tail -f /var/log/nginx/error.log # 测试 PHP 文件 echo "<?php phpinfo(); ?>" | php # 测试 PHP-FPM SCRIPT_NAME=/status \ SCRIPT_FILENAME=/status \ REQUEST_METHOD=GET \ cgi-fcgi -bind -connect /run/php/php8.2-fpm.sock ``` ## 卸载 PHP ```bash # 卸载特定版本 PHP sudo apt purge php8.2 php8.2-* libapache2-mod-php8.2 sudo apt purge php8.2-fpm # 删除配置文件 sudo rm -rf /etc/php/8.2 # 清除所有 PHP 相关包 sudo apt purge php* libapache2-mod-php* sudo apt autoremove sudo apt autoclean # 删除 Composer sudo rm -rf /usr/local/bin/composer sudo rm -rf ~/.composer ``` ## 实用脚本 ### 1. PHP 环境检查脚本 ```bash #!/bin/bash # check_php_env.sh echo "=== PHP Environment Check ===" echo "" echo "1. PHP Versions Installed:" ls /etc/php/ echo "" echo "2. Current PHP Version:" php --version | head -1 echo "" echo "3. PHP Modules Loaded:" php -m echo "" echo "4. PHP-FPM Status:" sudo systemctl status php*-fpm --no-pager echo "" echo "5. PHP.ini Loaded:" php --ini echo "" echo "6. PHP-FPM Pools:" sudo ls /etc/php/*/fpm/pool.d/ echo "" echo "7. PHP Error Log:" sudo ls -la /var/log/php* 2>/dev/null || echo "No PHP error logs found" echo "" echo "=== Check Complete ===" ```

Copyright © 2025-2026 人间一铺软件科技(上海)有限公司 沪ICP备2022005561号-4

开始访问