您的位置:首页 >PHP配置
发布于2026-04-26 阅读(0)
扫一扫,手机访问
这里整理了一些你可能需要的链接目录。
在Windows环境下,如果你安装了多个PHP版本,直接运行php script.php可能会调用全局默认的PHP CLI。这时候,指定绝对路径来执行特定版本是个好办法。
// 例如,分别执行PHP 5.6和PHP 8.0
'php5.6' => 'path\to\php5.6\php.exe script.php'
'php8.0' => 'path\to\php8\php.exe script.php'
// 一个具体的例子
D:\wamp64\bin\php\php8.0.26\php.exe windows.php
// 注意:即使指定了路径,有时仍可能因为环境变量问题而执行失败。
// 此时,可以临时设置PATH环境变量来确保使用正确的版本。
'Windows 使用 Set 命令临时设置 PATH 环境变量'
set PATH=D:\wamp64\bin\php\php8.0.26;%PATH%
// 设置完成后,再尝试执行通常就没问题了。
对于需要长时间运行的脚本,调整最大执行时间限制是必要的。可以通过ini_set函数在运行时动态修改。
// 将脚本最大执行时间设置为60秒
ini_set('max_execution_time', '60');
// 或者,设置为0表示不限制执行时间(请谨慎使用)
ini_set('max_execution_time', 0);
要启用OPcache,需要在php.ini文件中进行配置。关键是要把配置写在正确的区段。
// 配置应写在 [PHP] 区段下,写在其他区段可能不会生效。
[PHP]
;zend_extension=opcache.so // Linux环境下引用opcache
zend_extension=opcache.dll // Windows环境下引用opcache
[opcache]
; 同样,这里也需要指定扩展路径,例如:
zend_extension = "php_opcache.so"
zend_extension = "d:/wamp64/bin/php/php5.6.25/ext/php_opcache.dll"
opcache.enable=1 // 在Web环境下启用,默认开启
opcache.enable_cli=1 // 在CLI命令行环境下启用
// 配置完成后,可以通过以下代码检测OPcache是否成功开启
if (extension_loaded('Zend OPcache') && ini_get('opcache.enable')) {
echo "Opcache 已开启";
} else {
echo "Opcache 未开启";
}
// 对于PHP 8.0及以上版本,如果需要确认JIT是否生效,可以检查其状态
var_dump(opcache_get_status()['jit']);
// 输出类似 array:7 ["enabled" => true "on" => true ...] 则表示JIT配置成功。
OPcache提供了一系列有用的函数,方便我们进行缓存管理。
opcache_compile_file — 无需运行,即可编译并缓存 PHP 脚本
opcache_get_configuration — 获取php.ini中的配置信息
opcache_get_status — 获取缓存的状态信息
opcache_invalidate — 使指定脚本的缓存失效
opcache_is_script_cached — 检查一个php文件是否已被缓存
opcache_reset — 重置并清除所有的缓存内容
// 例如,新建一个脚本文件来清除所有OPcache缓存
生产环境和开发环境的OPcache配置策略往往不同。下面是一些核心配置项的说明。
// 开发环境通常不建议开启opcache,以免影响代码修改后的即时生效。
opcache.enable=1 // 总开关
opcache.memory_consumption=128 // 为Opcode缓存分配的内存大小(MB)
opcache.interned_strings_buffer=32 // 存储临时字符串的内存大小(MB)
opcache.max_accelerated_files=200000 // 最大可缓存的PHP文件数量
opcache.validate_timestamps=1 // 是否检查文件时间戳以判断缓存是否过期
opcache.revalidate_freq=60 // 检查时间戳的周期(秒),0表示每次请求都检查
opcache.sa ve_comments=0 // 是否缓存文档注释,关闭可减小缓存体积
opcache.jit=on // 控制JIT编译功能(PHP 8+)
opcache.jit_buffer_size=128M // 为JIT编译保留的共享内存大小
/**
* 关于 opcache.validate_timestamps 的取舍:
* 开启后,OPcache会定期检查源文件是否更新,这会带来轻微的性能开销。
* 在生产环境,代码更新不频繁,建议关闭此项以获得最佳性能。
* 当有新代码部署时,手动执行 opcache_reset() 或重启Web服务来清除缓存即可。
*
* 关于 opcache.enable_cli 的取舍:
* 启用后,在CLI模式下运行的PHP脚本也能使用OPcache。
* 但CLI模式通常是单次执行就结束的进程,开启OPcache意义不大,反而浪费内存和时间。
* 不过,如果你在使用Swoole等常驻内存的Web应用框架,开启它是有益的,可以避免重复编译模板等文件。
*/
这里是OPcache更完整的配置列表,供深度调优时参考。
// 启用(设置为1) 禁用(设置为0)
opcache.enable boolean // 总开关
opcache.enable_cli boolean // CLI模式开关
opcache.memory_consumption integer // 共享内存大小
opcache.interned_strings_buffer integer // 驻留字符串缓冲区大小
opcache.max_accelerated_files integer // 最大缓存文件数
opcache.validate_timestamps boolean // 是否验证时间戳
opcache.revalidate_freq integer // 验证频率(秒)
opcache.revalidate_path boolean // 是否在包含路径中重新验证
opcache.sa ve_comments boolean // 是否保存注释
opcache.max_wasted_percentage integer // 内存“浪费”上限百分比
opcache.use_cwd boolean // 使用工作目录避免命名冲突
opcache.load_comments boolean // 是否加载注释
opcache.fast_shutdown boolean // 启用快速关机
opcache.enable_file_override boolean // 覆盖 file_exists 等函数
opcache.optimization_level integer // 优化级别位掩码
opcache.inherited_hack boolean // PHP 5.3前的继承兼容性选项
opcache.dups_fix boolean // 修复“不可重定义类”错误
opcache.blacklist_filename string // 黑名单文件路径
// PHP 8 新增的JIT相关配置
opcache.jit=off|on|1255 // 控制JIT功能,1255通常能获得最高性能
opcache.jit_buffer_size=0|128M // 为JIT保留的共享内存量,0为禁用
PHP 版本信息泄露
系统数据包 X-Powered-By 字段泄露了 PHP 具体版本信息
暴露具体的PHP版本号会带来潜在的安全风险。关闭这个信息显示是一个简单的加固步骤。
// 找到并编辑 php.ini 文件
// 搜索 expose_php,将其值从 On 改为 Off
expose_php=Off
// 修改后,重启PHP-FPM或Apache服务使配置生效
service php-fpm restart
// 或者对于Apache
service httpd restart
首先要确定sqlserver扩展是否启用
连接SQL Server前,先确认PHP环境已加载必要的扩展。
// 方法一:通过phpinfo()查看
// 在输出页面中搜索 "sqlsrv" 或 "pdo_sqlsrv",找到即表示扩展已启用。
// 方法二:使用 extension_loaded 函数检测
确认扩展可用后,就可以使用sqlsrv_connect函数进行连接和查询了。
$server = '链接的服务器地址';
$database = '数据库名称';
$username = '用户名称';
$password = '用户密码';
$conn = sqlsrv_connect($server, array(
'UID' => $username,
'PWD' => $password,
'Database' => $database,
"CharacterSet" => "UTF-8" // 指定字符集,避免乱码
));
if( $conn) {
echo "连接成功";
$sql = "SELECT top 100 * FROM tb_user";
$res = sqlsrv_query($conn, $sql);
if ($res === false) {
die(print_r(sqlsrv_errors(), true)); // 查询失败时打印错误
}
while ($row = sqlsrv_fetch_array($res, SQLSRV_FETCH_ASSOC)) {
// 注意:字段名必须与数据库中的完全一致
echo "ID: " . $row['字段1'] . ", user_name: " . $row['字段2'] . "
";
}
} else {
echo "连接失败";
}
apache 和 PHP 的报错日志真的很重要,很重要,很重要
在 Windows 上有两种加载 PHP 扩展的方式:把扩展编译进 PHP,或者加载 DLL。加载预编译的扩展是更简单更被推荐的方式。
要加载扩展,需要在系统中有可用的 .dll 文件。
Xdebug是强大的PHP调试和性能分析工具。不同版本的配置方式略有差异。
// Xdebug 2.x 的配置示例
# zend_extension="xdebug.so" // Linux
zend_extension="xdebug.dll" // Windows
# 性能分析器总开关,设为1则每次请求都生成报告
# xdebug.profiler_enable=0
# 触发模式,设为1则仅在请求带 XDEBUG_PROFILE 参数时生成报告
# 例如:http://127.0.0.1/test/index.php?XDEBUG_PROFILE=1
xdebug.profiler_enable_trigger=1
# 分析文件输出目录
xdebug.profiler_output_dir="/var/tmp/xdebug"
// Xdebug 3.x 的配置示例
[xdebug]
zend_extension="d:/wamp64/bin/php/php8.0.26/zend_ext/php_xdebug-3.1.6-8.0-vs16-x86_64.dll"
xdebug.mode=profile // 设置为性能分析模式
xdebug.mode = debug // 也可以设置为调试模式
xdebug.start_with_request=trigger // 通过触发器启动分析
xdebug.output_dir="d:/wamp64/xtmp" // 分析文件输出目录
xdebug.client_port = 9003 // 确保调试端口未被占用
xdebug.client_host=127.0.0.1 // IDE所在IP,本地调试通常为127.0.0.1
/**
* Xdebug 3 的模式说明:
* debug: 用于交互式调试。
* profile: 生成性能分析文件。
* trace: 生成函数调用跟踪日志。
* coverage: 代码覆盖率分析。
* 可以同时启用多个模式,例如:xdebug.mode=debug,profile,trace
*
* xdebug.start_with_request=trigger 表示需要通过GET/POST参数或Cookie来触发分析。
* 如果设置为 yes,则每个请求都会自动启动分析,可能影响性能。
*/
git链接: webgrind
将webgrind下载下来后解压到本地的web目录,然后在浏览器中执行http://127.0.0.1/webgrind-master/,并且在显示webgrind页面右上角点击update
非正常情况:如果执行了浏览器只显示webgrind页面,执行update没有显示表格,那么可能需要执行在webgrind-master目录下执行 composer install,然后在config.php 设置对应xdebug生成cachegrind.out报告的路径
Webgrind是一个网页版的Xdebug性能分析结果查看器。其配置文件config.php中的路径设置是关键。
// webgrind-master文件夹下的config.php可以做相关配置
// 存储分析后生成的cachegrind文件的目录(可写)
$storageDir
// 如果没装xdebug,webgrind会到此路径下分析里面的cachegrind文件。
// 如果安装了xdebug,则会查找xdebug.profiler_output_dir指定的目录(默认是/tmp)
$profilerDir
Show::webgrind把所有被调用函数/方法首先做一个排序,由高到低显示。然后取出前N个,使他们耗时比率之和在90-100%之间。注意: 最好不要选择100%,这样将会显示所有被调用的函数/方法,如果是一个代码复杂的页面,那么webgrind偶尔会被卡死。并且通常我们只要关注耗时前几名的函数即可。
of: 就是选择profile文件。默认是分析最新一次的xdebug记录。如果之前设置好路径和记录机制那么我们就会发现下拉列表里有很多选项。
in: 显示百分比/毫秒/微秒
彩色进度条: 蓝代表php内置函数,灰色代表requir/onclude,绿代表类方法,橙黄代表类其他过程函数 (用户自定义函数)
update: 表示更新
需要配合下面的PHP代码进行分析,分析时候记得调整show到100%
invocation count 表示的是整个php页面从载入到执行完毕呈现,各种函数被调用的总次数(如sleep不管被哪个函数调用,总共页面期执行了6次,自身调用一次,t3调用一次,t4调用一次,t4调用t3一次,t5调用t4间接导致t3调用,1+1+2+2 = 6)。
total self cost 表示的是函数自身消耗(就如t5中10万次循环,但sleep执行了2000毫秒,但自身消耗并不把其他任何函数调用算在其中)。
total inclusive cost 表示的是此函数从开始到执行完毕所用消耗 ,包括自身消耗和调用其他函数消耗。
Calls 此函数中调用并执行的所有函数/方法名 次数 及耗时。
Total Call Cost 被此父函数调用时,执行的总耗时。
Count - 父函数调用子函数的次数。
下面这段代码包含了不同复杂度的函数调用,可以用来生成性能分析数据,并在Webgrind中观察结果。
//仅使用内置函数
function t1(){
time();
}
//自定义函数外再执行一次time();
sleep(1);
t1();
//t2调用自定义函数
function t2(){
t1();
}
t2();
//增加内置函数耗时
function t3(){
sleep(1);
}
t3();
//t4增加调用自定义函数t3一次。
function t4(){
t3();
sleep(1);
}
t4();
//t5增加非调用函数式内耗 for循环10万次,并调用t4
function t5(){
$u=0;
for($i=0;$i<100000;$i++){
$u+=$i;
}
t4();
}
t5();
die;
XHProf是Facebook开源的另一个轻量级PHP性能分析工具。它的配置相对简单。
// 在php.ini中添加xhprof扩展配置
[xhprof]
extension=php_xhprof.dll // 指定扩展DLL文件
xhprof.output_dir="D:/wamp64/xtmp/xhprof" // 指定性能分析数据输出目录
配置完成后,可以通过以下代码检查扩展是否成功加载。
// 使用phpinfo()来搜索xhprof或者使用下面代码
// 判断xhprof扩展是否安装
if (extension_loaded('xhprof')) {
echo 'xhprof扩展已安装';
} else {
echo 'xhprof扩展未安装';
}
// 判断xhprof扩展是否开启
if (function_exists('xhprof_enable')) {
echo 'xhprof扩展已开启';
} else {
echo 'xhprof扩展未开启';
}
```
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9