php exec()替换可能与proc_open()

时间:2011-07-15 07:21:55

标签: php

您可以使用exec()这样的命令

$cmd = "php -q nah.php some args";
echo `$cmd`;
echo "lalal";

但是如果php文件无权访问exec() cmd,并且我发现使用exec()并不安全。

我能找到的替代件为popen()proc_open()

我可以在没有参数的popen()中执行此操作,但我还想将一些参数(变量)传递给文件。

我该怎么做 - 激发文件并将参数(变量)一起传递?

2 个答案:

答案 0 :(得分:0)

//   foo.php

    function foo(){

     $var1 = $_GET['var1'];
     $var2 = $_GET['var2']

     //do something by variables



    } 

// bar.php

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, "foo.php?var1=XXXXXX&var2=XXXXXXXX"); 

    //Also you could send your variables by post 
    //$data = array('var1' => 'XXXXXXXXXXXX', 'var2' => 'XXXXXXXXX');
    //curl_setopt($ch, CURLOPT_URL, 'foo.php');
    //curl_setopt($ch, CURLOPT_POST, 1);
    //curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    $output = curl_exec($ch); 

    curl_close($ch);

    echo $output;

编辑

使用此

    $postdata = http_build_query(
        array(
            'var1' => 'some content',
            'var2' => 'doh'
        )
    );
    // If use POST 
    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );

    $context = stream_context_create($opts);
    $file = file_get_contents('foo.php', false, $context);   

    // USE GET 
   $opts = array('http' =>
        array(
            'method'  => 'GET',
            'header'=>"Content-Type: text/html; charset=utf-8"
        )
    );

    $context = stream_context_create($opts);
    $file = file_get_contents('foo.php?'.$data, false, $context); 

    echo $file;

答案 1 :(得分:0)

据我所知,命令行参数只是命令的一部分,因此它们会进入第一个参数,就像任何其他程序执行函数一样。