0

我正在寻找一种可能性,在 proc_open(exec、passthru 或其他)的帮助下通过管道将混合 PHP 多行字符串发送到 bash 脚本。最后,在这个脚本中,我想获取混合的多行字符串并将其存储到一个变量中。

PHP:

// static way
$some_multiline_string = 'some $%§%& mixed &/(/( 
content 
with newlines';

// dynamic way:
// the mixed content is coming from the database
// so actually it is not initialized like in the previous lines, but more like this:
$some_multiline_string = $db_result['some_multiline_string'];

// escaping
$some_multiline_string = escapeshellargs($some_multiline_string);

// execution
$process = proc_open("printf $some_multiline_string | some_script.sh args");
...

重击:

#!/bin/bash
mixed_multiline_string=$(</dev/stdin)
echo -e "$mixed_multiline_string"
...

如何在命令中使用混合内容之前正确转义它?我已经尝试过 escapeshellargs 和 escapeshellcmd,但要么有一个未转义的字符,它正在停止进程,要么它正在工作,但处理时间太长(1.5 分钟)。

这是一个示例混合内容字符串的链接:http: //playmobox.com/js/test.txt

非常感谢!

4

1 回答 1

0

我不知道 PHP,但 bash 应该做一些类似于右侧顶部相关的一篇文章:

#!/usr/bin/env bash

declare    line  ; line=
declare -a line_ ; line_=()

while IFS= read -r line ; do
    line_+=( "${line}" )
done < /dev/stdin

printf "%s\n" "${line_[@]}"

假设脚本的名称是some_script.sh你可以做的

% echo '&Ω↑ẞÐĦØđ¢ø' | bash some_script.sh
&Ω↑ẞÐĦØđ¢ø

while IFS= read -r line在这里解释:Bash, read line by line from file, with IFS and on the bash wiki

  • IFS 设置为空字符串,以防止读取从每行中剥离前导和尾随空格。——理查德·汉森
  • -r 原始输入 - 在读取的数据中禁用反斜杠转义和行继续的解释
于 2016-11-25T23:15:30.920 回答