【问题标题】:Append php array to php file using Linux command line使用 Linux 命令行将 php 数组附加到 php 文件
【发布时间】:2021-12-28 22:43:06
【问题描述】:

我有一个 php 文件,我需要使用 Linux 的 CLI 向它附加一个数组。我假设 sed 是这个工具,但我不知道该怎么做,因为我对 Linux 和 php 非常不熟悉。

示例 config.php

$CONFIG = array (
  'installed' => true,
  'instanceid' => 'sdsdfsfdsdf',
  'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory',
);

需要添加的数组

array (
    'class' => '\\OC\\Files\\ObjectStore\\S3',
    'arguments' =>
    array (
      'val1' => 'val1x',
      'val2' => 'val1x',
    ),
  ),

我还以为我可以使用cat 来追加它,但这会导致语法错误,因为文件需要以); 结尾

最终文件会这样显示

<?php
$CONFIG = array (
  'installed' => true,
  'instanceid' => 'sdsdfsfdsdf',
  'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory',
  array (
    'class' => '\\OC\\Files\\ObjectStore\\S3',
    'arguments' =>
    array (
      'val1' => 'val1x',
      'val2' => 'val1x',
    ),
  ),
);

【问题讨论】:

  • 显示您想要的确切结果。 cat 可以完成这项工作,您可以在之后编辑结果。
  • @Nic3500 我添加了一个例子

标签: php linux bash sed


【解决方案1】:

太好了,有了您想要的示例输出,这里有一个解决方案,使用 awk。 我把原文,以及你要添加的内容放到文本文件中。

orig.txt

$CONFIG = array (
  'installed' => true,
  'instanceid' => 'sdsdfsfdsdf',
  'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory',
  );

add.txt

  array (
    'class' => '\\OC\\Files\\ObjectStore\\S3',
    'arguments' =>
    array (
    'val1' => 'val1x',
    'val2' => 'val1x',
    ),
  ),

awk 脚本是merge.awk:

#!/usr/bin/awk -f

!/);/ {
    print
}
END {
    system("cat add.txt")
    print ");"
}
  • 这样称呼它:./merge.awk orig.txt
  • 它将在标准输出(即您的终端)中显示输出。
  • awk 逐行处理orig.txt 中的行
  • 不包含); 的每一行都会被打印出来
  • END 块,打印 add.txt 的内容,并打印回 ); 以关闭 PHP 数组。

输出是

$ ./merge.awk orig.txt
$CONFIG = array (
  'installed' => true,
  'instanceid' => 'sdsdfsfdsdf',
  'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory',
  array (
    'class' => '\\OC\\Files\\ObjectStore\\S3',
    'arguments' =>
    array (
    'val1' => 'val1x',
    'val2' => 'val1x',
    ),
  ),
);

【讨论】:

  • 我正在尝试在保存脚本后运行它,但我收到了 merge.awk: 3: Syntax error: ")" unexpected 错误。我打开 vim 并粘贴了你给我的内容,知道为什么吗?
  • 嗯,我只是尝试使用 vi(即 vim)重新创建 merge.awk 文件,它对我来说工作正常。你是在 linux 上还是在 windows 的某个 linux 子系统上?对于您的awk,我使用了 GNU awk 4.1.4,请确保您也使用 GNU awk。
  • 我在 Ubuntu 20.04 上。如果我尝试运行sudo ./merge.awk file.txt,我会得到sudo: ./merge.awk: command not found,即使我在merge.awk 存在的目录中。
  • 为什么是 sudo? PHP文件归root所有?那将是不寻常的...确保一旦您创建了merge.awk,请为您的用户执行chmod 700 merge.awk 以便能够执行该文件。并且您的用户必须能够读取和写入 txt 文件
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2021-07-25
相关资源
最近更新 更多