AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 989959
Accepted
IgorAlves
IgorAlves
Asked: 2017-12-28 08:00:24 +0800 CST2017-12-28 08:00:24 +0800 CST 2017-12-28 08:00:24 +0800 CST

如何通过终端获取和设置 php.ini 变量

  • 772

我想php.ini通过终端更改一些(php5.6)变量。示例:我需要获取post_max_size值(现在是8M),将其显示在终端中,将其更改为2048M并再次显示。

我怎么能那样做?

command-line
  • 3 3 个回答
  • 10848 Views

3 个回答

  • Voted
  1. Best Answer
    Arkadiusz Drabczyk
    2017-12-28T08:12:15+08:002017-12-28T08:12:15+08:00

    得到:

    grep '^post_max_size ' php.ini
    

    代替:

    sed -i 's,^post_max_size =.*$,post_max_size = 2048M,' php.ini
    

    请注意,php.ini在运行之前创建备份是个好主意sed:

    cp php.ini php.ini.bak
    
    • 14
  2. dessert
    2017-12-28T12:13:21+08:002017-12-28T12:13:21+08:00

    我假设您在php.ini每行存储一个值,并用=有或没有周围空格分隔。变量名和值都不包含=.

    要打印post_max_size值(选择一个):

    <php.ini awk -F"= *" '/^ *post_max_size/{print$2}'
    <php.ini sed '/^ *post_max_size/!d;s/.*= *//'
    <php.ini grep -oP '^ *post_max_size *= *\K.*'
    

    要将值更改为创建名为的备份:post_max_size2048Mphp.ini.bak

    sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini
    

    解释

    • <php.ini awk -F"= *" '/^ *post_max_size/{print$2}'
      • <php.ini– 让外壳打开php.ini并将其分配给程序的标准输入,这有很多优点,请参见此处
      • -F"= *"– 设置=后跟零个或多个空格字符作为字段分隔符
      • /^ *post_max_size/{print$2}– 从post_max_size打印字段开始的行2
    • <php.ini sed '/^ *post_max_size/!d;s/.*= *//'
      • /^ *post_max_size/!d-d删除除以开头的那一行之外的每一行post_max_size
      • s/.*= *//–s将之前的所有内容=和之后的零个或多个空格字符替换为空(= 删除它)
    • <php.ini grep -oP '^ *post_max_size *= *\K.*'
      • -oP– 仅打印o匹配行的匹配部分并使用与Perl 兼容的正则表达式 (PCRE)
      • ^ *post_max_size *= *\K.*– 搜索以零个或多个空格字符开头post_max_size并被=零个或多个空格字符包围的行,然后从整个正则表达式匹配 ( \K) 中删除匹配的文本并匹配其后的所有内容
    • sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini
      • -i.bak- 更改文件in 使用扩展名进行备份.bak
      • /^ *post_max_size/…– 在以 , 开头的行post_max_size中…
      • s/=.*/= 2048M/–s替代品=和之后的一切= 2048M
    • 4
  3. Dieter Gribnitz
    2018-04-05T19:02:23+08:002018-04-05T19:02:23+08:00

    我编写了一个简单的 bash 脚本来实现 Arkadiusz Drabczyk 的答案。

    该脚本自动检测 php 的活动版本。

    该脚本假定您使用的是 apache2(您可以传递第三个参数来覆盖)。

    我命名了该文件php-iniset并将其添加到我的 bin 目录之一。

    现在您可以致电:

    php-iniset post_max_size 2048M
    

    或者这样调用它来注释掉变量:

    php-iniset post_max_size
    

    您可能需要根据需要调整文件路径等内容

    记得先备份你的ini文件!

    这是脚本:

    #!/bin/bash
    #
    #   useage:
    #   php-iniset key value
    #
    #   sets php ini key to value
    #   if no value is supplied key will be commented
    #   If value is supplied key will automatically be commented out
    #
    key=$1
    val=$2
    scope=${3:-apache2}
    
    version=`php -r "echo substr(PHP_VERSION, 0, 3);"`
    filepath="/etc/php/$version/$scope/php.ini"
    
    if [ -f $filepath ]
    then
        if [ -e $val ]
        then
            #disable if value is empty
            sudo sed -i "/^$key =.*$/s/^/;/g" $filepath
    
            #confirm disabled
            grep "^;$key " $filepath
    
        else
            #enable if value has been supplied
            sudo sed -i "/^;$key =.*$/s/^;//g" $filepath
    
            #modify value
            sudo sed -i "s,^$key =.*$,$key = $val," $filepath
    
            #confirm value
            grep "^$key " $filepath
        fi
    
    else
        echo "$path does not exist"
    fi
    
    • -1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve