”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何启用/禁用 PHP 本机功能 – php.ini 教程

如何启用/禁用 PHP 本机功能 – php.ini 教程

发布于2024-11-02
浏览:113

在本文中,我想向您介绍通过编辑 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.ini 文件是 PHP 的配置文件。该文件包含称为“指令”的键/值对列表。指令分为几个部分,尽管这些主要用于组织目的。

当 PHP 启动时,它会读取该文件并设置内部数据结构来存储配置。在整个执行过程中,PHP 会参考这些内部数据结构来确定它在许多关键领域的行为方式,例如:错误处理和日志记录、资源限制(内存、执行时间)、文件上传、数据库连接等等。

对于也想知道的人:即使没有 php.ini 文件,PHP 也可以工作,它只会将默认值应用于所有指令。

对于不熟悉的人,这里是 php.ini 文件的示例:

https://github.com/php/php-src/blob/master/php.ini-product

启用/禁用 php.ini 中的功能

编辑 php.ini 文件,我们可以禁用本机 PHP 函数,您将无法在 PHP 代码中调用这些函数。

有时,此功能用于限制共享托管环境中某些功能的使用,因为错误使用这些功能可能会给其他用户带来安全问题。像 exec() 这样的函数通常被禁用,但有时服务器提供商过于保守,可能会禁用日常编程任务所需的函数。

找到 php.ini 文件

在计算机的终端中运行以下命令以获取文件的当前位置(适用于 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.ini 文件

  • 按键盘上的字母“i”进入 vim 的 INSERT 模式。
  • 从列表中删除 proc_open 和 proc_close 函数。
  • 完成文件编辑后,按 ESC 键。这将使您退出 INSERT 模式,并且“– INSERT –”将从终端左下角消失。
  • 要保存文件,请输入“:wq”,这是写入和退出指令。

重新启动 PHP 引擎

要加载新配置,您需要重新启动 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 上关注我。

免费监控您的 PHP 应用程序

Inspector是专门为软件开发人员设计的代码执行监控工具。您无需在服务器级别安装任何内容,只需安装 LaravelSymfony 软件包即可开始。

如果您正在寻找 HTTP 监控、数据库查询见解以及将警报和通知转发到您首选消息传递环境的功能,请免费尝试 Inspector。注册您的帐户。

或者在网站上了解更多信息:https://inspector.dev

How to enable/disable PHP native functions – php.ini Tutorial

版本声明 本文转载于:https://dev.to/inspector/how-to-enabledisable-php-native-functions-phpini-tutorial-kpg?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • CSS可以根据任何属性值来定位HTML元素吗?
    CSS可以根据任何属性值来定位HTML元素吗?
    靶向html元素,在CSS 中使用任何属性值,在CSS中,可以基于特定属性(如下所示)基于特定属性的基于特定属性的emants目标元素: 字体家庭:康斯拉斯(Consolas); } 但是,出现一个常见的问题:元素可以根据任何属性值而定位吗?本文探讨了此主题。的目标元素有任何任何属性值,属...
    编程 发布于2025-05-20
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-05-20
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-05-20
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-05-20
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-05-20
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-05-20
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-05-20
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-05-20
  • C++成员函数指针正确传递方法
    C++成员函数指针正确传递方法
    如何将成员函数置于c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&华仪的函数时,在接受成员函数指针的函数时,要在函数上既要提供指针又可以提供指针和指针到函数的函数。需要具有一定签名的功能指针。要通过成员函数,您需要同时提供对象指针(此...
    编程 发布于2025-05-20
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-05-20
  • 如何解决由于Android的内容安全策略而拒绝加载脚本... \”错误?
    如何解决由于Android的内容安全策略而拒绝加载脚本... \”错误?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    编程 发布于2025-05-20
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。本文深入研究了eval()和ast.literal_eval()之间的差异,突出显示其安全性含义...
    编程 发布于2025-05-20
  • Java中Lambda表达式为何需要“final”或“有效final”变量?
    Java中Lambda表达式为何需要“final”或“有效final”变量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    编程 发布于2025-05-20
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。 映射{} 因此。我们不使用jQuery的“ .aimimate(...
    编程 发布于2025-05-20

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3