在本文中,我想向您介绍通过编辑 php.ini 文件中的“disable_functions”指令来启用或禁用 php 本机函数的分步过程。
有时需要自定义服务器上的默认 PHP 配置,以适应系统与生产环境的兼容性。
我是 Inspector.dev 的作者,Laravel 和 Symfony 的实时监控包。该包使用 pro_open 和 proc_close php 本机函数来异步执行从服务器到 Inspector API 的数据传输。
它也可以配置为使用默认启用的 PHP 原生 CURL 函数,但在这种情况下,它会像其他软件包(如 Sentry、Bugsnag 等)一样以同步方式将监控数据发送到 Inspector。意味着您的应用程序可能会变慢一点,因为 php 引擎需要等待才能结束与客户端的连接。
最近一些开发人员联系我,因为他们的 php 配置中禁用了 proc_open 和 proc_close 函数,因此他们需要解锁它们才能利用异步数据发送。
这种情况非常罕见,但我决定编写本教程作为此用例的支持资源。
php.ini 文件是 PHP 的配置文件。该文件包含称为“指令”的键/值对列表。指令分为几个部分,尽管这些主要用于组织目的。
当 PHP 启动时,它会读取该文件并设置内部数据结构来存储配置。在整个执行过程中,PHP 会参考这些内部数据结构来确定它在许多关键领域的行为方式,例如:错误处理和日志记录、资源限制(内存、执行时间)、文件上传、数据库连接等等。
对于也想知道的人:即使没有 php.ini 文件,PHP 也可以工作,它只会将默认值应用于所有指令。
对于不熟悉的人,这里是 php.ini 文件的示例:
https://github.com/php/php-src/blob/master/php.ini-product
编辑 php.ini 文件,我们可以禁用本机 PHP 函数,您将无法在 PHP 代码中调用这些函数。
有时,此功能用于限制共享托管环境中某些功能的使用,因为错误使用这些功能可能会给其他用户带来安全问题。像 exec() 这样的函数通常被禁用,但有时服务器提供商过于保守,可能会禁用日常编程任务所需的函数。
在计算机的终端中运行以下命令以获取文件的当前位置(适用于 Win 和 Unix):
php --ini
常用位置:/etc/php.ini、/etc/php/8.x/php.ini(将 x 替换为您安装的版本号)
要在服务器上编辑文件,我更喜欢使用任何 Unix 机器上都可用的 vim 编辑器。
// Use the file path from the command above sudo vim /etc/php.ini
向下滚动到“disable_functions”指令。它应该位于文件的前半部分,并包含以逗号分隔的函数列表。
disable_functions=exec,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
要加载新配置,您需要重新启动 PHP。下面的说明应该适用于大多数服务器。您最终可以在 Google 上搜索特定操作系统。
// Change the version of the PHP with what is in use in your machine sudo systemctl restart php8.2-fpm.service
更多技术文章,您可以在 Linkedin 或 X 上关注我。
Inspector是专门为软件开发人员设计的代码执行监控工具。您无需在服务器级别安装任何内容,只需安装 Laravel 或 Symfony 软件包即可开始。
如果您正在寻找 HTTP 监控、数据库查询见解以及将警报和通知转发到您首选消息传递环境的功能,请免费尝试 Inspector。注册您的帐户。
或者在网站上了解更多信息:https://inspector.dev
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3