通过php system()传递多行html作为参数

时间:2012-08-16 10:07:03

标签: php python shell exec

由于与实际问题无关的原因,我需要通过PHP调用并使用外部脚本在完整的html文档上执行字符串替换。需要通过php exec()将替换字符串和源代码传递给此脚本。对于这个例子,我使用了一个简单的python脚本来接管替换。

PHP脚本如下所示:

$source = file_get_contents("somehtmlfile.html");
$replaceString = "Some text in the HTML doc";
$replaceTo = "Some other text";
$parsedString = system("python replace.py $replaceString $replaceTo $source", $retval);
print ("Done:" .$mystring);

然后Python脚本将执行以下操作:

import sys
import string
dataFrom = sys.argv[1];
dataTo = sys.argv[2];
dataSourceCode = sys.argv[3];
rep = dataSourceCode.replace(dataFrom, dataTo);
print rep;

问题是我无法将完整的html源作为参数传递给shell,至少不是以上面显示的方式。根据我的理解,当html代码传递给shell时,它会将一些部分解释为命令(多线可能是我认为的问题)。

我从脚本收到的输出:

sh:无法打开!DOCTYPE:没有这样的文件 sh:无法打开html:没有这样的文件 sh:无法打开头:没有这样的文件 sh:无法打开标题:没有这样的文件

...(接下来)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

它不起作用,因为html文本中有空格和引号作为参数传递,因此它被视为多个参数。要解决这个问题,你必须在参数旁边添加引号 正确的代码是$parsedString = system("python replace.py '$replaceString' '$replaceTo' '$source'", $retval);