0

我已经看到这个问题与 SQL 类似的问题

我将网页内容作为参数传递给 c++ 程序。

我的代码在这里:

<?php
//sent has value "http://www.paulgraham.com/herd.html"
$url=$_POST['sent'];
$text = file_get_contents($url);
$temp=strip_tags($text);
$output=shell_exec("/home/technoworld/Videos/LinSocket/Modular/x '$temp'");
echo $output;
?> 

它只为小内容提供输出。我得到的输出是

most : 1 in : 1 investors : 1 component : 1 2013The : 1 biggest : 1 August : 1 Dynamics : 1 Herd : 1 Investor : 1 Maximum Occurrences Investor Herd Dynamics August 2013The biggest component in most investors 

虽然实际上它显示了每个单词的计数。

当我在命令行中执行我的程序时手动:

./x "string"

它对“ http://www.paulgraham.com/herd.html ”的第一段有效并给出了正确的结果。但它不会在参数中传递第二个和下一个 para 内容。它只是写在命令行上。

如何在参数中传递这样的内容?对于小内容,它会提供正确的输出。

getconf ARG_MAX

我的系统允许的参数列表是:2097152

4

2 回答 2

1

您可以修改 C++ 和 PHP 源代码并构建管道。

C++

int main () {
    std::ostringstream txt;
    txt << std::cin.rdbuf();
    std::cout << "Input: \n" << txt.str() << std::endl;
    return 0;
}

PHP

<?php
$pipe = popen('Debug/Test', 'w'); 
if( ! $pipe) {
    // Error
} 
else { 
    $txt = 'Hello World'; 
    fwrite($pipe, $txt, strlen($txt)); 
    pclose($pipe);
}
?>
于 2013-08-31T06:37:48.387 回答
1

我已将您的 PHP 程序更改escapeshellarg为如下使用。我没有测试它,但我的猜测是它会工作

<?php
//sent has value "http://www.paulgraham.com/herd.html"
$url=$_POST['sent'];
$text = file_get_contents($url);
$temp=escapeshellarg(strip_tags($text));
$output=shell_exec("/home/technoworld/Videos/LinSocket/Modular/x " . $temp);
echo $output;
?>
于 2013-08-31T07:02:28.467 回答