故障排除

PHP 扩展和设置

Which PHP versions and extensions KapsuleHost web hosting provides, which settings you can change yourself, and why a change can take up to five minutes to appear.

KapsuleHost 网络托管提供的 PHP 版本和扩展、您可以自行修改的设置,以及为什么修改最多需要五分钟才能生效。

网站的所有 PHP 相关内容都在一个地方:Websites,点击网站,Advanced,然后 PHP。该页面包含版本选择器、您可以修改的设置、Composer 运行器和 PHP 错误日志。

KPanel 中网站的 PHP 选项卡

选择 PHP 版本

四个版本可选:8.4、8.3、8.2 和 8.1。新网站默认使用 8.3。

选择您的软件实际支持的最新版本。较新的 PHP 速度明显更快,并且能获得更长期的安全补丁支持。不直接跳到最新版本的原因是兼容性:多年前编写的旧插件或自定义代码可能在未经测试的版本上直接失败。

要更改它,请选择版本并点击 Apply Version。更改会立即生效,无需您重启,也不会造成停机。

先在暂存环境上更改 PHP 版本,点击浏览网站,然后再在生产环境上更改。如果必须在实时环境中进行,请在您能够监督的时候进行,并记住切换回来只需一次点击。请参阅暂存环境

如果版本更改破坏了网站,请切换回之前的版本并查看日志。错误将显示无法运行的文件名。请参阅更改 PHP 版本错误日志

您可以修改的设置

PHP 页面公开五个设置作为下拉菜单。这些是实际操作中真正会导致问题的设置,也是为什么它们被呈现出来的原因。

设置默认值可用值控制内容
memory_limit256M128M、256M、512M、1024M、2048M一个请求可以使用多少内存
max_execution_time3030、60、120、300、600一个请求可以运行多少秒
upload_max_filesize64M16M、32M、64M、128M、256M可以上传的最大单个文件
post_max_size65M17M、33M、65M、129M、257M最大的总表单提交大小
max_input_vars30001000、3000、5000、10000一个提交可以包含多少个字段

您需要的是哪一个:

  • 上传在某个大小以上失败:提高 upload_max_filesizepost_max_size
  • 大型表单或页面生成器在保存时丢失字段:提高 max_input_vars。这个很隐蔽且令人沮丧,因为没有错误提示。额外的字段会被静默丢弃。
  • 页面到一半突然中断且没有错误:提高 memory_limit。请参阅 WordPress 内存限制
  • 大型导入或导出超时:提高 max_execution_time,并考虑从命令行运行任务。请参阅 WP-CLI

post_max_size 必须大于 upload_max_filesize,因为上传在 post 内传输。如果您选择的组合不满足这个条件,平台会为您自动纠正 post_max_size。这就是为什么您可能会看到您没有选择的值。

为什么修改最多需要五分钟

这是此页面上最常见的困惑,所以值得精确说明。

您的设置被写入网站文档根目录中的 .user.ini 文件。PHP 读取该文件,然后缓存 300 秒,即五分钟。在此缓存过期之前,PHP 会一直使用旧值。

所以保存更改后:

  • 该页面可能仍会显示旧限制最多五分钟。
  • phpinfo() 可能仍会显示旧限制最多五分钟。
  • 硬刷新无法帮助。清除浏览器缓存也无法帮助。
  • 您无需重启任何内容,也无法重启。只需等待。

如果已经超过五分钟且值仍未改变,那么确实出现了问题,值得提交工单。

自行编辑 .user.ini

您可以通过 SFTP 或 SSH 直接编辑 .user.ini,如果您喜欢的话,或如果您需要面板未公开的指令。它位于网站的文档根目录。请参阅 SFTP 访问

格式是每行一个指令:

memory_limit = 512M
max_execution_time = 120

关于 .user.ini 可以做什么,有两个重要限制:

它仅适用于 PHP 允许按目录或按用户设置的指令。 上面的五个都符合条件。只能在系统级别设置的指令,例如 disable_functions 或用 extension= 加载扩展,在 .user.ini 文件中会被忽略。它们不会报错,只是不会执行任何操作,这就是为什么人们会花一整个下午在它们上面。

面板仅读取简单的键。 包含句点的指令,例如 opcache.enabledate.timezone,PHP 会遵守但不会在面板表单中显示。如果您手动设置了一个,之后又通过面板更改了其他内容,请随后检查该文件。

Kapsule 网络托管运行 nginx,而非 Apache。.htaccess 文件不会被任何人读取。放在 .htaccess 文件中的 PHP 指令,例如 php_value memory_limit,在这里完全不起作用。请改用 .user.ini 或面板。请参阅 WordPress 和 .htaccess

哪些扩展可用

标准构建范围很广,包括 WordPress、WooCommerce 和大多数 PHP 应用程序所需的一切。

数据库mysqlipdo_mysqlsqlite3pdo_sqlite 图像gdimagickexif 缓存Zend OPcacheredismemcached 文本和语言环境mbstringiconvintlgettextctype XML 和数据domsimplexmlxmlxmlreaderxmlwriterxsljson 网络curlsoapsocketsftpopenssl 数学和密码学bcmathsodiumhashrandom 文件和系统fileinfozipzlibpharposixpcntlshmopcalendartokenizer

一个值得了解的版本差异:imap 扩展在 8.3 及更早版本中存在,但在 8.4 中不存在,因为它在该版本的 PHP 中被移除了。如果您的应用程序仍然需要它,请保留在 8.3 或将该应用程序移至现代邮件库。

未安装:PostgreSQL 驱动、MongoDB、Xdebug、mcrypt 和商业代码加载器如 ionCube 和 SourceGuardian。

您无法从面板自行启用或禁用扩展。如果您的应用程序需要列表中没有的内容,请开工单并描述您运行的是什么。是否可以添加取决于扩展。请参阅开工单

检查实际加载的内容

与其猜测:

  • 在 WordPress 中:Tools,然后 Site Health,然后 Info,然后 Server。它列出了 PHP 版本和相关限制。
  • 通过 SSHphp -v 查看版本,php -m 查看加载的扩展。请参阅添加 SSH 密钥

不要在网络根目录中留下 phpinfo() 文件。它会向任何找到的人公开您的路径、扩展和配置,自动化扫描器就会寻找这个确切的文件名。如果您创建一个来检查某些内容,请立即删除它。

相关指南

仍需帮助?

请发送邮件至 support@kapsulehost.com 或在 KPanel 中打开聊天。

打开 KPanel
PHP 扩展和设置